如何在 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 最佳化程式以最大程度地減少編譯錯誤,但是,在嚴格模式下,最佳化級別要低得多。有時,嚴格模式程式碼執行速度比等效的鬆散風格程式碼更快。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP