JavaScript 如何启用严格模式

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优化程序以减少编译错误,然而,在严格模式中,优化水平要低得多。有时,严格模式代码比散漫风格编写的等效代码执行速度更快。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程