如何在 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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.