ES5的严格模式(strict mode)
启用
在JS文件或是函数的顶部(前无语句,可有注释)添加"use strict";
即可启用严格模式。
//全局开启严格模式
"use strict";
//函数内部开启严格模式
function asd(){
"use strict";
//code...
}
开启严格模式的几点注意
全局变量显式声明 变量名称拼错将抛出异常(正常模式下创建新全局变量,之后有可能报错)
for (i=0; i<5; i++) {code} //新手常犯错误
任何在正常模式下引起静默失败的赋值操作 (给不可写属性赋值, 给只读属性(getter-only)赋值, 给不可扩展对象的新属性赋值) 都会抛出异常(正常模式下无提示)
"use strict";
// 给不可写属性赋值
var obj1 = {};
Object.defineProperty(obj1, "x", { value: 42, writable: false });
obj1.x = 9; // 抛出TypeError错误
// 给只读属性赋值
var obj2 = { get x() { return 17; } };
obj2.x = 5; // 抛出TypeError错误
// 给不可扩展对象的新属性赋值
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = "ohai"; // 抛出TypeError错
严格模式下, 试图删除不可删除的属性时会抛出异常(正常模式下无提示)
"use strict";
delete Object.prototype; // 抛出TypeError错误
一个对象内的所有属性名在对象内必须唯一(正常模式下后者覆盖前者)
一个函数内的所有参数名在函数内必须唯一(正常模式下如有多个重名的参数,可用arguments[i]读取)
函数必须声明在顶层,不允许在非函数的代码块内声明函数
严格模式下,无法直接删除变量。只有configurable设置为true的对象属性,才能被删除
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。