Dotcpp  >  编程教程  >  JavaScript基础语法及数据类型  >  JS严格模式实例

JS严格模式实例

点击打开在线编译器,边学边练

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

上一课:

JS严格模式实例

下一课:

JS表单

JavaScript教程
第一章 JavaScript入门
第二章 JavaScript基础语法及数据类型
第三章 JavaScript函数
第四章 JavaScript类
第五章 JS高级教程
第六章 JS Window
第七章 JS库
Dotcpp在线编译      (登录可减少运行等待时间)