在 JavaScript 中,严格模式是在 ES5(ECMAScript 2009)版本中引入的。引入“严格模式”的目的是使 JavaScript 代码更加安全。
'use strict';
这个字面表达式用于在 JavaScript 代码中添加严格模式。它移除了代码中的隐式错误,例如不允许未声明就使用变量,不允许修改对象的只读属性等。
启用严格模式
要启用严格模式,你应该在代码的最顶部写入以下字面表达式:
'use strict';
'use strict';
指令用于启用 JavaScript 的严格模式。
为什么使用严格模式?
以下是使用严格 JavaScript 模式的一些原因:
-
错误预防 — 严格模式防止了开发者在编写 JavaScript 代码时常见的错误,例如在未声明的情况下初始化变量或使用保留关键字作为标识符。
-
更安全的代码 — 严格模式防止意外创建全局变量。同时,它不允许使用如
with
语句,这可能导致代码中的漏洞。
-
未来的兼容性 — 你可以通过使用脚本模式来使你的代码与未来版本的 JavaScript 保持一致。例如,当前版本的 JavaScript 不包含像
public
这样的关键字,但这些关键字可能被预留用于未来版本。因此,严格模式不允许你现在就将其用作标识符。
全局作用域中的严格模式
当你在 JavaScript 代码的顶部添加 'use strict';
时,它会对整个代码使用严格模式。
示例
在下面的例子中,我们定义了变量 y
并初始化为 50。代码会在输出中打印 y
的值。
此外,我们在未声明的情况下初始化了变量 x
。因此,它会在控制台中报错并且不会输出结果。
简而言之,严格模式不允许你在未声明的情况下使用变量。
<html>
<head>
<title> 使用全局严格的模式 </title>
</head>
<body>
<script>
"use strict";
let y = 50;
document.write("X 的值是: " + y);
x = 100;
document.write("X 的值是: " + x);
</script>
</body>
</html>
局部作用域中的严格模式
你也可以在特定函数内部使用“严格模式”。因此,它仅在函数作用域中应用。让我们通过一个例子来理解这一点。
示例
在下面的例子中,我们在 test()
函数内部仅使用了 'use strict';
字面量。因此,它仅移除了函数内的异常错误。
下面的代码允许你在函数外部未声明的情况下初始化变量,但在函数内部则不行。
<html>
<head>
<title> 使用局部严格的模式 </title>
</head>
<body>
<script>
x = 100;
document.write("X 的值是 - " + x);
function test() {
"use strict";
y = 50;
document.write("y 的值是: " + x);
}
test();
</script>
</body>
</html>
在严格模式下不应犯的错误
-
'use strict';
num = 70.90;
-
'use strict';
numObj = {a: 89, b: 10.23};
-
'use strict';
let women = { name: "Aasha", age: 29 };
delete women;
-
'use strict';
let women = { name: "Aasha", age: 29 };
delete women.prototype;
-
'use strict';
function func() { }
delete func;
-
'use strict';
function func(param1, param1, param2) {
}
-
'use strict';
let octal = 010;
-
'use strict';
let octal = \010;
-
你不能将保留关键字如
eval
、arguments
、public
等用作标识符。
'use strict';
let public = 100;
-
'use strict';
let person = {};
Object.defineProperty(person, 'name', { value: "abc", writable: false });
obj1.name = "JavaScript";
-
'use strict';
let person = { get name() { return "JavaScript"; } };
obj1.name = "JavaScript";
-
在严格模式下,当你在函数内部使用
this
关键字时,它指的是调用该函数的引用对象。如果没有指定引用对象,则它指向 undefined
值。
'use strict';
function test() {
console.log(this);
}
test();
-
'use strict';
with (Math) {x = sin(2)};
-
由于安全性原因,你不能使用
eval()
函数来声明变量。
'use strict';
eval("a = 8")
-
你不能将未来保留的关键字用作标识符。以下关键字是为将来预留的: