使用严格模式
在函数或者全局作用域的顶部使用"use strict"
, 可以实现向后兼容, 如果支持严格模式那么会启用这个模式,如果不支持那么就会被当做一个没有赋值的字符串
严格模式的规则
- 不能使用未声明的 变量
- 不能对变量调用
delete
操作符, 但是仍然可以delete
属性 - 操作对象在非严格模式下会静默失败的,在严格模式下就会抛出错误
- 函数中的参数不能有相同的命名, 非严格模式下不会报错,而且只能访问同名的最后一个的值,严格模式下会报错
argument
中的值和命名参数中的值相互独立,不再相互影响- 不能使用
arguments.callee、arguments.caller
- 不能在
if
等里面声明函数 eval
内部会创建自己的作用域,不再影响外部- 不能使用
eval、argument
作为标识符 - 非严格模式下,
null、undefined
会被转换为全局对象,也就是说使用apply、call
的时候,传入它们俩,this
仍为全局对象,而函数内部的this
默认是undefined
,也会被转换为全局对象。而在严格模式下,this
的值始终是指定的值, 未指定时,函数内部this
仍然是undefined
- 不能使用
with
、以及八进制字面量 parseInt
解析八进制字面量会被当做十进制