"use strict"
严格模式通过在脚本或函数的开头添加 "use strict"
字符串声明来启用:
全局作用域下启用严格模式:
"use strict";
function doSomething() {
// 严格模式在此处生效
// ...
}
函数作用域下启用严格模式:
function doSomething() {
"use strict";
// 严格模式仅在此函数内生效
// ...
}
消除了一些不安全的语法:
with
语句。with
语句容易引入难以理解的代码逻辑,且影响性能。delete someVariable
)。eval
解析包含变量声明的字符串代码。更严格的变量声明要求:
ReferenceError
错误。"use strict";
x = 10; // ReferenceError: x is not defined
消除静默错误:
"use strict";
const obj = {};
Object.defineProperty(obj, "x", { value: 42, writable: false });
obj.x = 9; // TypeError: Cannot assign to read only property 'x'
限制了函数的this
值:
this
如果没有显式设置,默认值为 undefined
,而非全局对象。这样可以避免意外地将全局对象污染。"use strict";
function f() {
console.log(this); // undefined
}
f();
禁止重复属性和参数:
"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;
}
提升代码质量:严格模式帮助开发者避免使用潜在的错误或不安全的特性,鼓励编写更清晰、健壮的代码。
更高的运行性能:一些现代的 JavaScript 引擎在处理严格模式代码时,可以进行更多的优化,提升执行效率。
增强安全性:严格模式禁止了一些可能导致安全隐患的操作,例如全局变量的意外创建。
总之,"use strict"
是一种良好的实践,尤其是在开发大型项目或公共库时。它帮助开发者发现和避免许多常见的错误,使代码更具可维护性和安全性。