为什么要使用严格模式?(初衷)

消除/减少Javascript语法层面的一些不合理,不严谨,不安全,怪异行为的一种方式。严格模式是提供一个更安全,更规范的方式。

使用方法

在脚本第一行或者function中的第一句

  1. 'use strict'
  2. function test(){
  3. 'use strict'
  4. }

兼容性

IE10 +
在IE9之前需增加一系列的polyfill
chrome safari opera firefox edge 较早期的版本都支持

严格的变化

  1. 变量
    1. 不允许不通过var创建全局变量 无法意外创建全局变量(暗示全局变量)
    2. 保留字和关键字不允许为变量名
    3. 禁止删除全局声明变量
      1. 本质是解决静默失败的问题
      2. 全局变量挂在window对象上,其对象标识符configure为false。
  2. 对象
    1. 对象属性描述符不符造成的,操作失效的问题(静默失败)变为报错
    2. for … in 不会报错
      1. 因为enumerable为false,不会被遍历出来是遵从其原则,不是静默失败。
  3. 函数
    1. 函数的参数必须是唯一
    2. 函数形参和实参arguments的映射关系不再存在
    3. caller callee被移除
      1. arguments.callee是调用者本身
      2. caller 不在arguments上面,而是调用的函数上的属性。是当前函数的调用者。
  4. eval 禁止声明变量
    1. 不为上层范围引入新变量
  5. with 不使用
    1. 正常模式也不应该使用
  6. this
    1. 默认指向由window转为undefined
  7. 禁止以0开头表示八进制数字
    1. 使用0o来表示八进制数字 (ES6新增)