如何在 JavaScript 中启用严格模式?
在 JavaScript 中,存在两种不同的编程范式。松散模式,有时也称为简单模式,默认情况下处于激活状态。在这种模式下,我们不必严格按照指南编写代码。另一方面,还有严格模式。此设置允许环境具有一些严格的约束。严格模式与常规代码具有不同的含义,并且不是松散模式的子集。本文将解释如何在 JavaScript 中启用严格模式,并将介绍“严格”模式的一些功能。
语法
不同的作用域可以允许严格模式。以下是语法:
脚本的严格模式:将整个脚本转换为严格模式
‘use strict;
函数的严格模式:将函数转换为严格模式
function function_name(){ ‘use strict’; // function body }
JavaScript 类已经处于严格模式,我们不需要为它们编写任何内容。
在 JavaScript 中启用严格模式后会发生哪些变化?
在松散的 JavaScript 中,错误有时会在执行过程中被隐藏并静默处理。例如,如果我们没有先定义未声明的变量,我们可以为其赋值。在该初始化语句之后,将自动生成一个全局变量。但是,由于我们正在为未定义的变量赋值,因此严格模式将产生错误。以下是一些其他的变化
严格模式抛出的一些错误在松散模式下会成为静默错误。
由于 JavaScript 引擎发现优化严格模式代码更具挑战性,因此它们有时比等效的松散模式代码执行得更快。
在严格模式下,会抛出一些错误;在松散模式下,这些错误会静默处理。因为它使得 JavaScript 引擎在修复错误时难以进行任何优化,所以严格模式代码有时比等效的松散模式代码执行得更快。
借助严格模式,我们可以开发安全的 JavaScript 代码。
松散的 JavaScript 代码可能会秘密地接受不正确的语法。这在严格模式下运行时会导致实际错误。它有助于编写更好的 JavaScript 代码。
即使严格模式会向开发人员提供错误消息,松散的 JavaScript 在变量不可读时也不会产生错误。
当我们在严格模式下尝试为仅 getter、不存在或不可写的属性赋值时,将引发错误。
示例
让我们看一些示例来了解哪些在严格模式下是不允许的
源代码
// Assigning to a variable that is not declared beforehand "use strict"; a = 2.5; console.log("Value of variable a = " + a);
输出
a = 2.5; ^ ReferenceError: a is not defined ....
所以,声明一个变量并使用它
源代码
"use strict"; var a a = 2.5; var b = 5.7; console.log("Value of variable a:", a); console.log("Value of variable b:", b);
输出
Value of variable a: 2.5 Value of variable b: 5.7
在严格模式下不允许删除变量。
源代码
"use strict"; let a = 2.5; console.log(a); delete a;
输出
delete a; ^ SyntaxError: Delete of an unqualified identifier in strict mode. ....
不允许写入只读对象。
源代码
"use strict"; const obj = {}; Object.defineProperty(obj, "a", {value:10, writable:false}); console.log(obj.a) obj.a = 5.27;
输出
10 obj.a = 5.27; ^ TypeError: Cannot assign to read only property 'a' of object '#<Object>' ...
不允许创建与保留关键字同名的变量
源代码
"use strict"; let public = 15;
输出
let public = 15; ^^^ SyntaxError: Unexpected strict mode reserved word ...
在松散模式下,我们可以使用“With”关键字,这在严格模式下不允许:
源代码
// in sloppy mode with (Math){a = sqrt(64)}; console.log(a);
输出
8
源代码
// in strict mode "use strict"; with (Math){a = sqrt(64)}; console.log(a);
输出
with (Math){a = sqrt(64)}; ^^^^ SyntaxError: Strict mode code may not include a with statement ...
结论
JavaScript 的严格模式使在安全的环境中开发语言成为可能。此模式限制了从松散模式的隐式转换,并禁止语法不良的代码。JavaScript 优化程序以最大程度地减少编译错误,但是,在严格模式下,优化级别要低得多。有时,严格模式代码执行速度比等效的松散风格代码更快。