概述
开启严格模式方法"use strict";
, 如果放在文件开头就是全局开启严格模式, 还可以在函数内声明, 这么做的话就是这个函数开启严格模式.
- 严格模式下无法再意外创建全局变量。在普通的JavaScript里面给一个拼写错误的变量名赋值会使全局对象新增一个属性。严格模式中意外创建全局变量被抛出错误替代:
"use strict";
a = 1; // 报错, 因为找不到a的声明
- 在严格模式下, 试图删除不可删除的属性时会抛出异常
"use strict";
delete Object.prototype; // 抛出TypeError错误, 如果不是在严格模式会返回false, 不会报错
- , 严格模式要求函数的参数名唯一. 在正常模式下, 最后一个重名参数名会掩盖之前的重名参数. 之前的参数仍然可以通过 arguments[i] 来访问, 还不是完全无法访问.
function sum(a, a, c){ // !!! 语法错误
"use strict";
return a + a + c; // 代码运行到这里会出错 Uncaught SyntaxError: Duplicate parameter name not allowed in this context
}
- 严格模式禁止八进制数字语法. ECMAScript并不包含八进制语法, 但所有的浏览器都支持这种以零(0)开头的八进制语法:
0644 === 420
还有"