主页 > 知识库 > 网页基础 > Javascript/Ajax >
栏目列表

Javascript 严格模式详解(2)

来源:中国IT实验室 作者:佚名 发表于:2013-01-18 13:27  点击:
4.5 显式报错 正常模式下,对一个对象的只读属性进行赋值,不会报错,只会默默地失败。严格模式下,将报错。 use strict; var o = {}; Object.defineProperty(o, v, { value: 1, writable: false }); o.v = 2; /

  4.5 显式报错    正常模式下,对一个对象的只读属性进行赋值,不会报错,只会默默地失败。严格模式下,将报错。
    "use strict";
    var o = {};
    Object.defineProperty(o, "v", { value: 1, writable: false });
    o.v = 2; // 报错
    严格模式下,对一个使用getter方法读取的属性进行赋值,会报错。
    "use strict";
    var o = {
    get v() { return 1; }
    };
    o.v = 2; // 报错
    严格模式下,对禁止扩展的对象添加新属性,会报错。
    "use strict";
    var o = {};
    Object.preventExtensions(o);
    o.v = 1; // 报错
    严格模式下,删除一个不可删除的属性,会报错。
    "use strict";
    delete Object.prototype; // 报错
    4.6 重名错误
    严格模式新增了一些语法错误。
    (1)对象不能有重名的属性
    正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。
    "use strict";
    var o = {
    p: 1,
    p: 2
    }; // 语法错误
    (2)函数不能有重名的参数
    正常模式下,如果函数有多个重名的参数,可以用arguments[i]读取。严格模式下,这属于语法错误。
    "use strict";
    function f(a, a, b) { // 语法错误
    return ;
    }
    4.7 禁止八进制表示法
    正常模式下,整数的第一位如果是0,表示这是八进制数,比如0100等于十进制的64。严格模式禁止这种表示法,整数第一位为0,将报错。
    "use strict";
    var n = 0100; // 语法错误
    4.8 arguments对象的限制
    arguments是函数的参数对象,严格模式对它的使用做了限制。
    (1)不允许对arguments赋值
    "use strict";
    arguments++; // 语法错误
    var obj = { set p(arguments) { } }; // 语法错误
    try { } catch (arguments) { } // 语法错误
    function arguments() { } // 语法错误
    var f = new Function("arguments", "'use strict'; return 17;"); // 语法错误
    (2)arguments不再追踪参数的变化
    function f(a) {
    a = 2;
    return [a, arguments[0]];
    }
    f(1); // 正常模式为[2,2]
    function f(a) {
    "use strict";
    a = 2;
    return [a, arguments[0]];
    }
    f(1); // 严格模式为[2,1]
    (3)禁止使用arguments.callee
    这意味着,你无法在匿名函数内部调用自身了。
    "use strict";
    var f = function() { return arguments.callee; };
    f(); // 报错
    4.9 函数必须声明在顶层
    将来Javascript的新版本会引入”块级作用域”。为了与新版本接轨,严格模式只允许在全局作用域或函数作用域的顶层声明函数。也就是说,不允许在非函数的代码块内声明函数。
    "use strict";
    if (true) {
    function f() { } // 语法错误
    }
    for (var i = 0; i < 5; i++) {
    function f2() { } // 语法错误
    }
    4.10 保留字www.2cto.com
    为了向将来Javascript的新版本过渡,严格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield。
    使用这些词作为变量名将会报错。
    function package(protected) { // 语法错误
    "use strict";
    var implements; // 语法错误
    }
    此外,ECMAscript第五版本身还规定了另一些保留字:class, enum, export, extends, import, super。它们也是不能使用的。

有帮助
(2)
100%
没帮助
(0)
0%