JavaScript |严格模式
JavaScript 是一种动态语言,也就是说,从变量到代码本身,每个 Javascript 组件都是动态的。借助 JavaScript,您可以在运行时创建变量、更改其数据类型、创建新函数或替换现有逻辑,换句话说,在使用 JavaScript 时,开发人员几乎可以完全控制。为什么几乎?有句名言,
“With great power comes great responsibility.”
— Ben Parker
JavaScript 非常严格地遵循这一原则,而在射手编码员的项目中,JavaScript 的表现就像是最好的编程语言之一,它在新手手中可能完全随机地工作。这种随机行为虽然是建立从内到外学习 JavaScript 的愿望不可或缺的一部分,但可能会增加某些复杂性,尤其是在项目中使用时。 JavaScript 的开发人员在 ES5 中添加了一个称为严格模式的新特性,该特性旨在禁止该语言的某些行为,以减少随机行为并增加编写不佳代码的可检测性。这些限制使代码更加安全,并且总体上保持了高标准的编码。 JavaScript 代码在引擎执行之前经过优化,使用严格模式可以看出开发人员现在可以编写高度优化的程序。它不仅是开发人员推荐的,也是工业编码标准的强制性包含。
语法:为了在你的脚本中使用严格模式,我们只需要执行下面的代码,严格模式也称为严格模式 pragma 有它自己的范围,可以影响整个文件或依赖于它的单个方法。
"use strict";
功能:我们现在知道,严格模式基本上是 JavaScript 的一种模式,它更加痴迷于正确的语法和其他逻辑范式,而这些范式过去允许使用而无需太多探索。但是,这些在严格模式下不再允许的语法和逻辑错误是什么?以下是一些重要的简要列表。
- 自动全局变量声明:这是 JavaScript 中最大的问题之一,如果您错误地使用没有定义的变量,则不使用严格模式,JavaScript 不会抛出错误,而是在全局范围内声明变量,这通常会导致随机性和不希望的输出。启用严格模式后,它会抛出一个常规引用错误,通知要使用的变量从未定义过。
来源:"use strict"; // Turn on strict mode. a = 1;
输出:
Uncaught ReferenceError: a is not defined
注意:在 JavaScript 中,对象也是变量,因此它还需要关键字 'var'、'let' 或 'const' 来定义一个。
- 删除任何 JavaScript 元素:与常规模式相比,这是一个很大的变化,因为在严格模式下不允许删除任何变量或函数。这使得代码更加可优化,因为作用域是静态的并且在生命周期内不会改变。
来源:"use strict"; // Turn on strict mode. var a = 1; delete a;
输出:
Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
注意:您可能会问为什么错误说unqualified ? JavaScript 提供了一种功能,您可以在其中将对象的属性定义为可删除,以限定要在严格模式下删除的属性。
- 使用保留关键字作为变量名:与大多数其他程序不同,JavaScript 允许使用保留关键字作为严格模式下不允许的变量名。
来源:"use strict"; // Turn on strict mode. var eval = 5;
输出:
Uncaught SyntaxError: Unexpected eval or arguments in strict mode.
- 参数名称重复:与大多数其他程序不同,JavaScript 允许使用在严格模式下被禁止的重复参数名称。
来源:"use strict"; // Turn on strict mode. var eval = 5;
输出:
Uncaught SyntaxError: Unexpected eval or arguments in strict mode.
参考:
- https://es5.github.io/
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode