JS-严格模式

严格模式对正常的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() { } // 同样合法
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。...
    才気莮孒阅读 202评论 0 1
  • 通过严格模式,可以在函数内部 选择进行较为严格的全局或局部的错误条件检测。使用严格模式的好处是可以提早知道代码中存...
    oWSQo阅读 522评论 0 0
  • "use strict"使用"use strict"指令的目的是说明(脚本或函数中)后续的代码将会解析为严格代码(...
    80bb3ef13dea阅读 1,499评论 0 6
  • 'use strict' 是在一个严格的模式下 在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式...
    FConfidence阅读 273评论 0 0
  • 那是一年深秋,满地的落叶把小镇染成了一片黄色。那一层层枯叶装裱的学校,不是画中的颜色。没有金灿灿的,也不像柔...
    sethjie阅读 474评论 1 0