ES6严格模式

126 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天juejin.cn/post/712312…

从ES5开始,函数内部可以设定为严格模式。

 

1、严格模式下,delete运算符后跟随非法标识符,会抛出语法错误,非严格模式下。会静默失败并返回false。

2、严格模式中,对象直接量(指的就是字面量表示法)中定义同名属性会抛出语法错误,非严格模式不会报错。

3、严格模式中,函数形参存在同名的,抛出错误;非严格模式不会

4、严格模式是不允许八进制整数直接量(如:023),0就代表八进制

5、严格模式中,argunments对象是传入函数内实参列表的静态副本,非严格模式下,arguments对象里的元素和对应的实参指向同一个值的引用。

6、严格模式中,eval和arguments当作关键字,它们不能被直接赋值和用作变量声明。

7、严格模式会限制对调用栈的检测能力,访问arguments,callee,callehr会抛出异常

8、严格模式变量必须先声明,直接给变量赋值,不会隐式创建全局变量,不用with。

9、严格模式中call,apply传入null、undefined保持原样不被转换为window。

  • 对整个js文件设置严格模式,就在js文件一行写上"use strict".
  • 在ES5里,函数内部也可以设置严格模式,在函数内部第一行写上"use strict"。
例子:function f(){
       "use strict";
       在这里接着写函数体
    }

除非特殊情况,我们也很少设置严格模式。

ES2016(ES7)做了一点修改,规定只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错。

非严格模式下,argument存的是指针。

严格模式中call和apply方法,不写this指向的话,那个函数里的方法,还是原来的this指向的对象,在非严格模式下,如果不写this指向,指向的是window对象。