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的对象属性,才能被删除


幸运儿
916 声望139 粉丝

引用和评论

0 条评论