为什么要使用严格模式?(初衷)
消除/减少Javascript语法层面的一些不合理,不严谨,不安全,怪异行为的一种方式。严格模式是提供一个更安全,更规范的方式。
使用方法
在脚本第一行或者function中的第一句
'use strict'
function test(){
'use strict'
}
兼容性
IE10 +
在IE9之前需增加一系列的polyfill
chrome safari opera firefox edge 较早期的版本都支持
严格的变化
- 变量
- 不允许不通过var创建全局变量 无法意外创建全局变量(暗示全局变量)
- 保留字和关键字不允许为变量名
- 禁止删除全局声明变量
- 本质是解决静默失败的问题
- 全局变量挂在window对象上,其对象标识符configure为false。
- 对象
- 对象属性描述符不符造成的,操作失效的问题(静默失败)变为报错
- for … in 不会报错
- 因为enumerable为false,不会被遍历出来是遵从其原则,不是静默失败。
- 函数
- 函数的参数必须是唯一
- 函数形参和实参
arguments
的映射关系不再存在 - caller callee被移除
- arguments.callee是调用者本身
- caller 不在arguments上面,而是调用的函数上的属性。是当前函数的调用者。
- eval 禁止声明变量
- 不为上层范围引入新变量
- with 不使用
- 正常模式也不应该使用
- this
- 默认指向由window转为undefined
- 禁止以0开头表示八进制数字
- 使用0o来表示八进制数字 (ES6新增)