什么是严格模式?
JavaScript的严格模式是一种受限的JavaScript变体,它改变了某些行为的处理方式,使代码更加安全、优化和符合未来标准。通过在脚本或函数顶部添加 "use strict"; 即可启用。
// 全局开启严格模式
"use strict";
x = 3.14; // 抛出ReferenceError: x未定义
严格模式的核心优势
1. 消除静默错误
普通模式下,许多错误会被静默忽略。严格模式则将这些错误显式抛出。
"use strict";
// 赋值给不可写属性
const obj = {};
Object.defineProperty(obj, "x", { value: 42, writable: false });
obj.x = 9; // 抛出TypeError
// 给不可扩展对象添加新属性
const fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = "ohai"; // 抛出TypeError
2. 禁止使用with语句
with语句难以优化且易导致混淆,严格模式彻底禁用。
"use strict";
// 以下代码会抛出SyntaxError
with (Math) {
x = cos(2);
}
3. 防止意外的全局变量
未声明的变量赋值将抛出错误,避免创建意外全局变量。
"use strict";
mistypedVariable = 17; // 抛出ReferenceError
4. 限制保留关键字的使用
保留关键字(如eval、arguments)不能用作变量名。
"use strict";
const eval = 10; // 抛出SyntaxError
5. 增强eval()安全性
严格模式下eval()不会在周围作用域引入新变量。
"use strict";
eval("var x = 10;");
console.log(x); // 抛出ReferenceError: x未定义
6. 禁止删除不可删除属性
尝试删除不可删除属性时会抛出错误。
"use strict";
delete Object.prototype; // 抛出TypeError
7. 函数参数唯一性
要求函数参数名称唯一,避免混淆。
"use strict";
function sum(a, a, c) { // 抛出SyntaxError
return a + a + c;
}
8. 禁止this默认指向全局对象
普通模式下,this默认指向全局对象(浏览器中为window),严格模式下为undefined。
"use strict";
function test() {
console.log(this); // 输出undefined
}
test();
如何启用严格模式
全局启用
在脚本文件顶部添加 "use strict";
"use strict";
// 整个脚本都将以严格模式运行
const v = "Hi! I'm a strict mode script!";
函数级别启用
在函数体顶部添加 "use strict";
function strict() {
"use strict";
// 此函数以严格模式运行
function nested() {
return "And so am I!";
}
return "Hi! I'm a strict mode function! " + nested();
}
严格模式的注意事项
- 谨慎合并代码:将严格模式和非严格模式脚本合并可能导致问题
- 向后兼容:旧版浏览器会忽略"use strict"指令,不会产生影响
- 逐步迁移:大型项目可以逐个函数启用严格模式
结语
严格模式不仅是JavaScript的一个特性,更是编写高质量代码的必备工具。它通过强制更好的编码实践和提前发现错误,显著提高了代码的可靠性和可维护性。在现代JavaScript开发中,使用严格模式已成为行业最佳实践。
开始在你的下一个项目中启用严格模式,体验更安全、更清晰的编程方式吧!
376

被折叠的 条评论
为什么被折叠?



