5. 不允许使用 with 语句
在 JavaScript 中,with 语句用于临时改变作用域链,以便更方便地访问对象的属性和方法。然而,由于 with 语句容易引发一些潜在的问题,例如命名冲突、难以优化的代码以及不可预测的行为,因此在严格模式下禁止了使用 with 语句。
"use strict"; var obj = { x: 10, }; // 在严格模式下使用 with 语句会引发错误 with (obj) { console.log(x); // 在严格模式下,会导致错误:SyntaxError: Strict mode code may not include a with statement }
6. 不允许写入只读属性
在严格模式下,如果尝试为只读属性赋值或者为不存在的属性赋值,会导致运行时错误。而在非严格模式下,尽管赋值操作不会成功,但并不会报错。
以下是一个示例来说明这一点
"use strict"; var obj = { x: 10, }; // 尝试为只读属性赋值会引发错误 Object.defineProperty(obj, "y", { value: 20, writable: false, }); obj.x = 5; // 在严格模式下,不会报错,但赋值不会成功 obj.y = 15; // 在严格模式下,会导致错误:TypeError: Cannot assign to read-only property 'y' of object '#<Object>' console.log(obj.x); // 在严格模式下输出:10 console.log(obj.y); // 在严格模式下输出:20
7. 不允许使用八进制数(以零为前缀的数字)
在严格模式下不允许使用八进制数(以零为前缀的数字),而在非严格模式下是可以的。
以下是一个示例来说明这一点:
"use strict"; var octalNumber = 010; // 在严格模式下,会导致错误:SyntaxError: Octal literals are not allowed in strict mode. console.log(octalNumber);
8.不能在if语句中声明函数
在严格模式下,不允许在 if 语句中声明函数。在非严格模式下,这样的声明是允许的。 "use strict"; if (true) { // 在严格模式下,下面的函数声明会导致错误:SyntaxError: In strict mode code, functions can only be declared at top level or immediately within another function. function myFunction() { console.log("Hello"); } } myFunction(); // 在严格模式下,会导致错误:ReferenceError: myFunction is not defined
9. 禁止使用 this 表示全局对象
在普通模式下,this 关键字确实表示全局对象 window。但在严格模式下,this 关键字不会再默认指向全局对象,而是为 undefined。
以下是一个示例来说明这一点:
// 普通模式下 console.log(this === window); // 输出:true // 严格模式下 "use strict"; console.log(this === window); // 输出:false console.log(this); // 输出:undefined
实际上,"严格模式"确实提供了一种更合理、更安全、更严谨的JavaScript开发方式。它强制执行一些规则和标准,可以帮助开发者避免一些常见的错误和陷阱,提高代码的质量和可靠性。
本文固定URL:https://www.dotcpp.com/course/1301