JavaScript中的`strict mode`

JavaScript中的`strict mode`

本文解釋了 JavaScript 中的 strict mode

YouTube Video

JavaScript中的strict mode

在 JavaScript 中,strict mode(嚴格模式)是 ECMAScript 5 (ES5) 中引入的一個功能,用於提高代碼的安全性並防止錯誤。使用嚴格模式時,一些寬鬆的語法和可能存在風險的功能會被禁用,並實施更嚴格的錯誤檢查。這使得開發人員能避免意外行為,並撰寫出更加健壯且高效的代碼。

啟用strict mode

要啟用 strict mode,請在程式碼的開頭添加以下指令。

1"use strict";

此聲明可以應用於整個腳本或基於每個函數進行應用。例如,如果應用於整個腳本,您可以如下撰寫:。

1"use strict";
2
3function example() {
4    // Strict mode is applied
5}

如果應用於每個函數,您可以如下撰寫:。

1function example() {
2    "use strict";
3    // Strict mode is applied only within this function
4}

strict mode是按作用域應用的,因此它也可以在函數內啟用。另外,由於在模組中預設啟用「嚴格模式」(strict mode),因此無需在模組內單獨宣告它。

strict mode的關鍵特性與差異

使用strict mode會改變一些JavaScript的默認行為。以下是主要示例。

禁止隱式全局變量

在普通JavaScript中,未聲明變量時會自動將其定義為全局變量,但在strict mode中,這會導致錯誤。

1"use strict";
2
3x = 10;  // Error: x is not defined

變量必須始終使用 varletconst 進行聲明。

限制保留字的使用

strict mode中,可能成為未來JavaScript關鍵字(如implementsinterfacepackage等)不能用作變量或函數名稱。

1"use strict";
2
3var package = "strict mode";  // Error: Unexpected strict mode reserved word

this 的行為變化

在普通模式下,函數中的this指向全局對象(例如瀏覽器中的window),但在strict mode中,thisundefined

1"use strict";
2
3function example() {
4    console.log(this);  // undefined
5}
6
7example();

這有助於防止由於不正確使用 this 而引起的錯誤。

禁止刪除不可刪除的屬性

在普通模式下,嘗試刪除不可刪除的對象屬性會被忽略且不會報錯,但在strict mode中會拋出錯誤。

1"use strict";
2
3var obj = Object.freeze({name: "John"});
4delete obj.name;  // Error: Cannot delete property 'name'

禁止重複的參數名稱

在普通模式下,可以多次聲明相同名稱的參數,但在strict mode中,這會引發錯誤。

1"use strict";
2
3function example(a, a) {
4    // Error: Duplicate parameter name not allowed in this context
5}

禁止使用 with 語句

with語句會降低代碼的可讀性,因此在strict mode中被禁止。

1"use strict";
2
3with (Math) {
4    // Error: Strict mode code may not include a with statement
5}

strict mode的優勢

strict mode在許多方面提高了代碼的安全性和效能。

改進錯誤檢測

strict mode中,可以檢測到普通模式下被忽略的錯誤,幫助開發人員及早發現潛在的bug。例如,它可以防止未意圖的全域變數創建以及保留字的誤用。

提高性能

strict mode中,JavaScript引擎可以更高效地對代碼進行優化。因此,執行速度可能會提升。

增強程式碼安全性

this 的處理更加嚴格,避免訪問不必要的全域對象,從而提高程式碼的安全性。此外,對保留字使用的限制可以避免未來與關鍵字的衝突。

相容性與注意事項

strict mode是在ECMAScript 5中引入的,在此之前釋出的瀏覽器不支援此功能。然而,未支援的瀏覽器只會忽略啟用strict mode的指令,並不會破壞腳本。因此,它通常可以安全使用。

在將strict mode引入一個大型現有專案時,全面測試是必不可少的,以避免意外錯誤。

結論

JavaScript的strict mode是一項對提升代碼品質極為有用的功能。特別是對於大型項目或團隊開發,建議積極使用嚴格模式,以防止意外的錯誤和漏洞,並提升程式碼的可讀性與可維護性。

理解並正確應用strict mode有助於避免JavaScript的陷阱,實現更安全、更高效的開發。

您可以在我們的 YouTube 頻道上使用 Visual Studio Code 來跟隨上述文章一起學習。 請也查看我們的 YouTube 頻道。

YouTube Video