如何在 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 优化程序以最大程度地减少编译错误,但是,在严格模式下,优化级别要低得多。有时,严格模式代码执行速度比等效的松散风格代码更快。

Arnab Chakraborty
Arnab Chakraborty

企业培训师

更新于:2023年4月4日

163 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告