JavaScript 严格模式
栏目:
Javascript
发布时间:2024-11-05
JavaScript 的严格模式(Strict Mode)是一种使 JavaScript 代码在更加严格的条件下运行的方式,有助于捕获一些常见的编码不规范以及防止或抛出潜在的错误。在严格模式下,JavaScript 会改变它的行为,禁止或抛出错误来避免某些不安全的操作。
以下是一个包含严格模式的 JavaScript 示例,并解释了其中的一些关键点:
"use strict";
// 1. 变量必须声明
// 在严格模式下,未声明的变量会导致错误
// x = 10; // 这行代码在严格模式下会抛出错误:ReferenceError: x is not defined
var y = 20;
console.log(y); // 输出: 20
// 2. 禁止删除变量或函数
var z = 30;
// delete z; // 这行代码在严格模式下会抛出错误:TypeError: Cannot delete variable z
function foo() {
return "foo";
}
// delete foo; // 这行代码在严格模式下会抛出错误:TypeError: Cannot delete function foo
// 3. 禁止重复的属性名
var obj = {
a: 1,
a: 2 // 这行代码在严格模式下会抛出错误:SyntaxError: Duplicate data property in object literal not allowed in strict mode
};
// 4. 禁止八进制字面量
// var octal = 015; // 这行代码在严格模式下会抛出错误:SyntaxError: Octal literals are not allowed in strict mode.
// 5. 对只读属性的写操作会抛出错误
var readOnlyObj = Object.defineProperties({}, {
prop: {
value: 42,
writable: false
}
});
// readOnlyObj.prop = 33; // 这行代码在严格模式下会抛出错误:TypeError: Cannot assign to read only property 'prop' of object '#<Object>'
// 6. 对 `eval` 和 `arguments` 的更严格处理
function example() {
"use strict";
var args = arguments;
eval("var x = 10;");
console.log(x); // 输出: ReferenceError: x is not defined (在严格模式下,eval 不会泄露变量到外层作用域)
console.log(args); // 输出: Arguments(1) [/* 调用时的参数 */]
// args.callee; // 这行代码在严格模式下会抛出错误:TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
}
example(42);
// 7. 禁止 `with` 语句
var objWithProps = {
a: 1,
b: 2
};
// with (objWithProps) {
// var c = a + b; // 这行代码在严格模式下会抛出错误:SyntaxError: Strict mode code may not include a with statement
// }
// 8. 抛出更多的错误
function testStrict() {
"use strict";
"This is a syntax error"; // 这行代码在严格模式下会抛出错误:SyntaxError: Unexpected string
}
// testStrict();
// 9. 禁用 `this` 绑定到全局对象
function showThis() {
"use strict";
return this;
}
console.log(showThis()); // 输出: undefined (在严格模式下,非方法函数中的 `this` 是 `undefined`)
// 10. 构造函数必须返回对象
function Constructor() {
"use strict";
// return; // 这行代码在严格模式下会抛出错误:TypeError: Constructor Constructor() returned undefined
return {};
}
var instance = new Constructor();
console.log(instance); // 输出: [object Object]
在这个示例中,我们展示了严格模式的一些关键特性,包括禁止未声明的变量、禁止删除变量或函数、禁止八进制字面量、对只读属性的写操作抛出错误、对 eval
和 arguments
的更严格处理、禁止 with
语句、抛出更多的错误、禁用 this
绑定到全局对象以及构造函数必须返回对象。
要使用严格模式,只需在脚本或函数的顶部添加 "use strict";
声明即可。严格模式有助于编写更安全、更易于管理的 JavaScript 代码。
本文地址:https://www.tides.cn/p_js-use-strict