美文网首页
JS-严格模式

JS-严格模式

作者: 居客侠 | 来源:发表于2017-11-10 13:09 被阅读10次

    严格模式对正常的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() { } // 同样合法
    }
    

    相关文章

      网友评论

          本文标题:JS-严格模式

          本文链接:https://www.haomeiwen.com/subject/qundextx.html