js严格模式
loyalvi Lv7

js严格模式

JavaScript 的严格模式(Strict Mode)是一种运行模式,它对 JavaScript 代码施加更严格的语法和行为限制,旨在减少一些常见的编程错误,提高代码的可读性和可维护性。严格模式在 ES5 中引入,并在 ES6 中得到了进一步的扩展和改进。

启用严格模式

要启用严格模式,只需在 JavaScript 文件或函数的顶部添加 "use strict"; 声明。这行声明必须是脚本或函数体中的第一条可执行语句。

全局严格模式

1
2
3
4
5
"use strict";
function greet() {
console.log("Hello, world!");
}
greet(); // Hello, world!

函数严格模式

1
2
3
4
5
function greet() {
"use strict";
console.log("Hello, world!");
}
greet(); // Hello, world!

严格模式的特点

  1. 禁止使用 with 语句
    • with 语句会导致作用域链的动态变化,容易引起混淆和错误。严格模式下,使用 with 语句会抛出语法错误。
    1
    2
    3
    4
    "use strict";
    with (obj) { // SyntaxError: Strict mode code may not include a with statement
    console.log(obj.prop);
    }
  2. 禁止使用 arguments.callee
    • arguments.callee 用于引用当前正在执行的函数,但在严格模式下,它被禁止使用,以避免潜在的性能问题。
    1
    2
    3
    4
    5
    "use strict";
    function factorial(n) {
    if (n <= 1) return 1;
    return n * arguments.callee(n - 1); // TypeError: 'callee' and 'caller' are read-only properties
    }
  3. 禁止删除不可删除的属性
    • 在严格模式下,尝试删除不可删除的属性会抛出 TypeError
1
2
"use strict";
delete Object.prototype; // TypeError: Cannot delete property 'prototype' of function Object()
  1. 禁止使用 eval 创建变量
    • 在严格模式下,eval 代码中的变量不会被提升到包含它的作用域中。
    1
    2
    3
    "use strict";
    eval("var x = 10;");
    console.log(x); // ReferenceError: x is not defined
  2. 禁止使用 arguments.callerarguments.callee
    • 这些属性在严格模式下被禁止使用,以避免潜在的性能问题。
    1
    2
    3
    4
    5
    "use strict";
    function myFunction() {
    console.log(arguments.caller); // TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
    }
    myFunction();
  3. 禁止使用 this 指向全局对象
    • 在严格模式下,函数中的 this 不再指向全局对象(window),而是 undefined
    1
    2
    3
    4
    5
    "use strict";
    function test() {
    console.log(this); // undefined
    }
    test();
  4. 禁止使用 new Function 创建函数时的 this 指向全局对象
    • 在严格模式下,使用 new Function 创建的函数中的 this 也不再指向全局对象,而是 undefined
    1
    2
    3
    "use strict";
    var f = new Function("console.log(this)");
    f(); // undefined
  5. 禁止使用前缀 0 表示八进制数
    • 在严格模式下,前缀 0 不再表示八进制数,而是十进制数。
    1
    2
    "use strict";
    var x = 010; // SyntaxError: Octal literals are not allowed in strict mode.

严格模式的好处

  1. 减少常见错误:严格模式通过禁止一些容易引起错误的语法和行为,帮助开发者编写更健壮的代码。
  2. 提高性能:严格模式下的代码通常比非严格模式下的代码执行得更快,因为一些优化措施在严格模式下更容易实现。
  3. 更好的工具支持:严格模式下的代码更容易被静态分析工具分析,从而提供更好的代码检查和优化建议。

总结

严格模式是 JavaScript 中的一种运行模式,通过施加更严格的语法和行为限制,帮助开发者编写更健壮、更高效的代码。通过在脚本或函数的顶部添加 "use strict"; 声明,可以启用严格模式。严格模式禁止了一些容易引起错误的语法和行为,如 with 语句、arguments.callee、删除不可删除的属性等,从而减少常见错误,提高代码的可读性和可维护性。

由 Hexo 驱动 & 主题 Keep
访客数 访问量