JavaScript 严格模式与混乱模式
最后更新于
最后更新于
从 ES5 开始,ES5引入了严格模式(Strict Mode),并使用use strict
作为语法声明未使用严格模式时,则称之为混乱模式(非严格模式)
ES6 的 class
与模块内默认采用严格模式。
严格模式 | 非严格模式 |
---|---|
示例:
禁止使用with
语句
允许使用with
语句
所有变量要先声明
使用未声明的变量将隐式声明为全局变量
函数中的this
是undefined
this
默认指向全局对象
call()
和apply()
传入的第一个值不会被转换
call()
和apply()
传入的第一个值如果是null
或undefined
则会被全局对象取代,如果是原始值则转换为对应的包装对象
给只读属性和不可扩展的对象创建新成员将会抛出类型错误异常
只是简单的操作失败
传入eval()
的代码不能再定义变量和函数
变量和函数定义在eval()
创建的新作用域中
delete
后跟非法标识符将抛出语法错误异常
只是简单的返回false
delete
删除不可配置的属性将抛出类型错误异常
只是简单的返回false
在对象直接量中定义多个同名属性将产生语法错误
不会报错
函数声明存在多个同名的参数将产生语法错误
不会报错
不允许使用八进制直接量
允许部分实现
将eval()
和arguments
当作关键字,并且不允许更改
限制了对栈的检测能力,arguments.caller
和arguments.callee
将抛出类型错误异常
函数中的arguments
对象拥有传入函数值的静态副本