JavaScript 如何启用严格模式
在JavaScript中,有两种不同的编程范式。默认情况下,启用的是宽松模式,有时也称为简单模式。我们不必严格按照指南编写代码。另一方面,还有严格模式。这个设置允许环境有一些严格的限制。严格模式与常规代码有不同的含义,并不是宽松模式的子集。本文将解释如何在JavaScript中启用严格模式,并介绍一些“严格”模式的特点。
语法
不同的范围可以允许启用严格模式。以下是语法:
脚本的严格模式:将整个脚本转换为严格模式
‘use strict;
函数的严格模式:将一个函数转换为严格模式
function function_name(){
‘use strict’;
// function body
}
JavaScript类已经处于严格模式,我们不需要为它们编写任何内容。
在JavaScript中启用严格模式后会有哪些改变
在松散的JavaScript中,错误有时会被隐藏和静默执行。例如,如果我们没有先定义一个变量,就可以给它赋值。在此初始化语句之后,将自动生成一个全局变量。但是由于我们给一个未定义的变量赋值,严格模式将会产生一个错误。以下是一些进一步的变化:
- 一些严格模式抛出的错误在松散模式下成为静默错误。
-
由于JavaScript引擎在修复错误时很难进行优化,严格模式代码有时比等价的松散模式代码执行更快。
在严格模式下,会抛出一些错误;在松散模式下,这些错误会被隐藏。当错误被修正时,JavaScript引擎变得更难进行任何优化,因此严格模式代码有时比等价的松散模式代码执行更快。
- 我们可以借助严格模式开发安全的JavaScript代码。
-
松散的JavaScript代码可能会暗中接受错误的语法。当在严格模式下运行时,这可能导致真正的错误。它有助于编写更好的JavaScript代码。
-
当一个变量不可读时,松散的JavaScript不会产生错误,即使严格模式会给开发者显示错误消息。
-
当我们尝试给只读、不存在或不可写的属性赋值时,严格模式将会抛出错误。
示例
让我们看一些示例,以了解在严格模式下不允许的内容
源代码
// 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优化程序以减少编译错误,然而,在严格模式中,优化水平要低得多。有时,严格模式代码比散漫风格编写的等效代码执行速度更快。