资讯专栏INFORMATION COLUMN

js严格模式下的总结

liaorio / 2770人阅读

摘要:也可以只在函数中打开严格模式严格模式下没有全局变量严格模式下会报错,非严格模式下正常删除变量有三种声明的情形声明的全局变量声明的局部变量中声明的全局变量第一种和第二种情况是无法用删掉的。

所谓严格模式其实就是一个不会赋值给任何变量的字符串 “use strict”
如果在全局作用域下 给出这个提示,那整个脚本将采用严格模式。也可以只在函数中打开严格模式

1.严格模式下没有全局变量

a="test"

严格模式下会报错,非严格模式下正常

2.删除变量

var 有三种声明的情形

var 声明的全局变量

var 声明的局部变量

eval()中声明的全局变量

第一种和第二种情况是无法用 delete删掉的。
首先第一种情况声明的全局对象虽然是windows的属性,但这个属性的configurable=false 因此是无法删除的
第二种情况 局部变量更不行了,连依附的对象是谁都不知道,怎么删除

第三种情况eval()稍后会说到。

回归正题。也就是说非严格模式下,可以删除变量,但是会失败返回false.
严格模式下删除变量会报错。

3.对象

在下列情况下操作对象会报错

为只读属性赋值会报错

对不可配置的属性使用delete 会报错

为不可扩展的对象添加属性会报错

在使用对象字面量的时候,属性名必须唯一。比如

var person={
   name:"1",
    name:"2"
}

非严格模式下会默认取值第二个,严格模式下会报错。

4.函数

严格模式要求函数参数名称必须唯一

function(n,n){
   // todo
}

在非严格模式下,这个函数声明不会报错,通过参数名只能访问到第二个参数,第一个参数得通过arguments去访问。
arguments在两种模式下也有所不同
在非严格模式下,修改命名参数的值会反映到arguments对象中,在严格模式下两个值是独立的。
淘汰了 arguments.callee(引用函数本身),arguments.caller(引用调用函数)。
严格模式下函数名不能使用js保留字
**严格模式下只能在脚本的顶级和在函数内部声明函数,在if语句中声明函数会导致语法错误。
**

if(true){
   function(){
     // 严格模式下报错
}
}
5.this

在非严格模式下使用函数的apply(),call(),传入null 或者undefined值会被转换为全局对象。在严格模式下,函数的this始终是指定的值,无论指定的是什么值。

var a="1";
function test(){
  console.log(this.a)
}
test.call(null) 在非严格模式下会输出1,严格模式下this就指代的就是null,null没有a属性,就会报错。

一会回来补充点别的

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/92897.html

相关文章

  • JS专题之严格模式

    摘要:整个脚本文件就会以严格模式执行。函数作用域范围将放在函数体的第一行,则整个函数以严格模式运行。严格模式下,必须指明的指向对象。禁止在非函数代码块声明函数的严格模式只允许在全局作用域或函数作用域声明函数。 ECMAScript 5 引入了 strict mode ,现在已经被大多浏览器实现(从IE10开始) 一、什么是严格模式 顾名思义,JavaScript 严格模式就是让 JS 代码以...

    baukh789 评论0 收藏0
  • this总结【1】—— this概览

    摘要:是什么这个单词是一个代词,所以应该是指代某些东西搞清楚的关键之处,就是要搞清楚指代了什么那么到底指代了什么呢就像你平时指着一个苹果说指着一个香蕉说同样,也会因为情况的不同而不同在中按照常规理解,的值是什么取决于函数如何被调用然而,的值是什么 1. this是什么 this这个单词是一个代词,所以this应该是 指代某些东西搞清楚this的关键之处,就是要搞清楚this指代了什么 那么t...

    MyFaith 评论0 收藏0
  • 严格模式和非严格模式区别

    摘要:严格模式和非严格模式有什么区别严格模式对正常的语义做了一些更改。其次,严格模式修复了一些导致引擎难以执行优化的缺陷有时候,相同的代码,严格模式可以比非严格模式下运行得更快。 严格模式和非严格模式有什么区别: 严格模式对正常的 JavaScript语义做了一些更改。首先,严格模式通过抛出错误来消除了一些原有静默错误。其次,严格模式修复了一些导致 JavaScript引擎难以执行优化的缺陷...

    liaoyg8023 评论0 收藏0
  • JS 中 this 在各个场景下的指向

    摘要:声明了一个函数,并且将它作为一个构造函数调用构造函数调用构造函数调用是函数的构造函数调用。构造函数中的在构造函数调用中指向新创建的对象构造函数调用的上下文是新创建的对象。来看看下面示例中的上下文正在进行构造函数调用,其中上下文是。 为了保证的可读性,本文采用意译而非直译。 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 1. this 的奥秘 很多时候, JS 中...

    WrBug 评论0 收藏0
  • 使用浏览器调试严格模式下的代码

    摘要:它的代码草稿纸简直是浏览器里的调试神器,不仅简单直观,而且也具备了一般的编辑器功能,无奈用习惯了的,我用得较少但感觉作为开发者工具绝对业界良心。 一般平时的少量测试代码, 我习惯直接在Chrome的DEV中调试, 一般的调试都没有问题, 但难免一些小概率事件, 比如调试严格模式下的代码(关于严格模式,mark在这里?严格模式), 这时候如果直接在console里输入use strict...

    tigerZH 评论0 收藏0

发表评论

0条评论

liaorio

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<