跳到主要内容

JavaScript "use strict" 模式

提示
  1. 严格模式定义:在JavaScript中,使用'use strict';声明的代码将以“严格模式”执行,增加了错误检查,提高了代码安全性。
  2. 变量和函数中的严格模式:在严格模式下,未声明的变量会导致错误。严格模式可以应用于整个脚本或单个函数。
  3. 严格模式的限制和优势:严格模式中不允许使用未声明的变量、对象、重复参数名等,提高了代码的清晰度和安全性,有助于识别和处理潜在的错误。

在 JavaScript 中,'use strict'; 表明代码应该在 '严格模式' 下执行。这使编写良好和安全的 JS 代码变得更容易。例如,

myVariable = 9;

这里,未声明就创建了 myVariable。在 JavaScript 中,这作为一个全局变量。然而,如果你在严格模式下使用它,程序将抛出错误。例如,

"use strict";

// 错误
myVariable = 9;

上述代码因为没有声明 myVariable 而抛出错误。在严格模式下,你不能在不声明的情况下使用变量。

要表明这个程序在严格模式下,我们在程序的顶部使用了

"use strict";

你可以通过在程序开始时添加 'use strict';"use strict"; 来声明严格模式。

当你在程序开始时声明严格模式,它将具有全局作用域,程序中的所有代码都将在严格模式下执行。

变量中的严格模式

在严格模式下,不声明就使用变量会抛出错误。

注意:你需要在程序开始时声明严格模式。如果你在一些代码下面声明严格模式,它不会起作用。

例如,

console.log("一些代码");

// 'use strict' 被忽略
// 必须在顶部
("use strict");

x = 21; // 不会抛出错误

函数中的严格模式

你也可以在函数内部使用严格模式。例如,

myVariable = 9;
console.log(myVariable); // 9

function hello() {
// 仅适用于此函数
"use strict";

string = "hello"; // 抛出错误
}

hello();

如果你在函数内使用 'use strict';,函数内的代码将处于严格模式。

在上述程序中,'use strict';hello() 函数内使用。因此,严格模式仅在函数内部适用。

正如你所见,在程序开始时,没有声明就使用了 myVariable

如果你在程序顶部声明 'use strict';,那么在函数内部也不能不声明就使用变量。例如,

// 适用于整个程序
"use strict";

function hello() {
string = "hello"; // 抛出错误
}

hello();

注意:严格模式不适用于带有 {} 大括号的块语句。

严格模式中不允许的事情

1. 不允许未声明的变量。

"use strict";

a = "hello"; // 抛出错误

2. 不允许未声明的对象。

"use strict";

person = { name: "Carla", age: 25 }; // 抛出错误

3. 不允许删除对象。

"use strict";

let person = { name: "Carla" };

delete person; // 抛出错误

4. 不允许重复参数名称。

"use strict";

function hello(p1, p1) {
console.log("hello");
} // 抛出错误

hello();

5. 不允许赋值给不可写属性。

"use strict";

let obj1 = {};

Object.defineProperty(obj1, "x", { value: 42, writable: false });

// 赋值给不可写属性
obj1.x = 9; // 抛出错误

6. 不允许赋值给仅有 getter 的属性。

"use strict";

let obj2 = {
get x() {
return 17;
},
};

// 赋值给仅有 getter 的属性
obj2.x = 5; // 抛出错误

7. 不允许赋值给不可扩展对象的新属性。

"use strict";

let obj = {};
Object.preventExtensions(obj);

// 赋值给不可扩展对象的新属性
obj.newValue = "new value"; // 抛出错误

8. 不允许八进制语法。

"use strict";

let a = 010; // 抛出错误

9. 变量名 arguments 和 eval 不允许使用。

"use strict";

let arguments = "hello"; // 抛出错误

let eval = 44;

10. 在严格模式下也不允许使用这些保留关键字。

implements interface let package private protected public static yield

严格模式的好处

使用严格模式:

  • 有助于编写更清晰的代码
  • 将先前被接受的静默错误(错误语法)转变为真正的错误,并抛出错误信息
  • 使编写“安全”的 JavaScript 更加容易