use strict 是什么意思?使用它有什么区别?

2024-07-31 21:30:28 128
`"use strict"` 是 JavaScript 中的一种严格模式(strict mode)。它通过将代码放置在更严格的解析和执行上下文中来提升代码的安全性和性能。严格模式可以在全局作用域或函数作用域中启用。

如何使用 "use strict"

严格模式通过在脚本或函数的开头添加 "use strict" 字符串声明来启用:

全局作用域下启用严格模式

"use strict";

function doSomething() {
  // 严格模式在此处生效
  // ...
}

函数作用域下启用严格模式

function doSomething() {
  "use strict";
  // 严格模式仅在此函数内生效
  // ...
}

严格模式的特点和变化

  1. 消除了一些不安全的语法

    • 禁止了使用 with 语句。with 语句容易引入难以理解的代码逻辑,且影响性能。
    • 禁止在函数内删除变量或函数 (delete someVariable)。
    • 禁止使用 eval 解析包含变量声明的字符串代码。
  2. 更严格的变量声明要求

    • 在严格模式下,必须显式声明变量。使用未声明的变量将导致 ReferenceError 错误。
    "use strict";
    x = 10; // ReferenceError: x is not defined
    
  3. 消除静默错误

    • 严格模式下,赋值给只读属性或给不可扩展对象添加新属性将抛出错误,而非静默失败。
    "use strict";
    const obj = {};
    Object.defineProperty(obj, "x", { value: 42, writable: false });
    obj.x = 9; // TypeError: Cannot assign to read only property 'x'
    
  4. 限制了函数的this

    • 在严格模式下,函数内部的 this 如果没有显式设置,默认值为 undefined,而非全局对象。这样可以避免意外地将全局对象污染。
    "use strict";
    function f() {
      console.log(this); // undefined
    }
    f();
    
  5. 禁止重复属性和参数

    • 在对象字面量和函数参数中禁止使用重复的属性名称和参数名称。
    "use strict";
    const obj = { a: 1, a: 2 }; // SyntaxError: Duplicate data property in object literal not allowed in strict mode
    function sum(a, a) { // SyntaxError: Duplicate parameter name not allowed in this context
      return a + a;
    }
    

使用严格模式的好处

  1. 提升代码质量:严格模式帮助开发者避免使用潜在的错误或不安全的特性,鼓励编写更清晰、健壮的代码。

  2. 更高的运行性能:一些现代的 JavaScript 引擎在处理严格模式代码时,可以进行更多的优化,提升执行效率。

  3. 增强安全性:严格模式禁止了一些可能导致安全隐患的操作,例如全局变量的意外创建。

总之,"use strict" 是一种良好的实践,尤其是在开发大型项目或公共库时。它帮助开发者发现和避免许多常见的错误,使代码更具可维护性和安全性。