严格模式对正常的Javacript语义做了一些更改:
1.严格模式消除了一些 JavaScript的静默错误,通过改变它们来抛出错误。
2.严格的模式修复了 JavaScript引擎难以执行优化的错误:有时候,严格模式代码可以比非严格模式的相同的代码运行得更快。
3.严格模式禁用了在ECMAScript的未来版本中可能会定义的一些语法。
行为
使拼写错转为异常
1.无法再意外创建全局变量
2.引起静默失败
// 给不可写属性赋值
var obj1 = {};
Object.defineProperty(obj1, "x", { value: 42, writable: false });
obj1.x = 9; // 抛出TypeError错误
// 给只读属性赋值
// 给不可扩展对象的新属性赋值
3.试图删除不可删除的属性时会抛出异常
4.不允许同名属性
5.函数参数名唯一
6.禁止八进制数字语法
7.禁止设置primitive值的属性
(function() {
"use strict";
false.true = ""; //TypeError
(14).sailing = "home"; //TypeError
"with".you = "far away"; //TypeError
})();
简化变量的使用
8.禁用with
9.禁止删除声明变量
"use strict";
var x;
delete x; // !!! 语法错误
eval("var y; delete y;"); // !!! 语法错误
让eval和arguments变的简单
10.名称 eval 和 arguments 不能通过程序语法被绑定(be bound)或赋值
11.参数的值不会随 arguments 对象的值的改变而变化
12.不再支持 arguments.callee
为未来的ECMAScript版本铺平道路
13.一部分字符变成了保留的关键字
14.禁止了不在脚本或者函数层面上的函数声明
"use strict";
if (true){
function f() { } // !!! 语法错误
f();
}
for (var i = 0; i < 5; i++){
function f2() { } // !!! 语法错误
f2();
}
function baz() { // 合法
function eit() { } // 同样合法
}