2020 年 5 月 19 日

現代模式,「使用嚴格模式」

很長一段時間以來,JavaScript 在沒有相容性問題的情況下不斷演進。新的功能會新增到語言中,而舊有的功能則不會改變。

這帶來的好處是不會中斷現有的程式碼。但缺點是 JavaScript 創造者所犯的任何錯誤或不完美的決策,將永遠停留在語言中。

這種情況一直持續到 2009 年 ECMAScript 5 (ES5) 出現。它為語言新增了新功能,並修改了一些現有功能。為了讓舊程式碼繼續運作,大多數此類修改在預設情況下都是關閉的。你需要使用特殊指令明確啟用它們:"use strict"

“嚴格使用”

此指令看起來像字串:"use strict"'use strict'。當它位於腳本的最上方時,整個腳本會以「現代」的方式執行。

例如

"use strict";

// this code works the modern way
...

很快地,我們將會學習函式(一種將指令分組的方式),因此讓我們事先注意,"use strict" 可以放在函式的開頭。這樣做會僅在該函式中啟用嚴格模式。但通常人們會將它用於整個腳本。

確保「嚴格使用」位於最上方

請務必確認 "use strict" 位於腳本的最上方,否則嚴格模式可能無法啟用。

在此處未啟用嚴格模式

alert("some code");
// "use strict" below is ignored--it must be at the top

"use strict";

// strict mode is not activated

只有註解可以出現在 "use strict" 上方。

沒有辦法取消 use strict

沒有像 "no use strict" 這樣的指令可以將引擎還原為舊行為。

一旦我們進入嚴格模式,就無法回頭了。

瀏覽器主控台

當您使用 開發人員主控台 執行程式碼時,請注意它預設不會 use strict

有時,當 use strict 有所不同時,您會得到不正確的結果。

那麼,如何在主控台中實際 use strict 呢?

首先,您可以嘗試按 Shift+Enter 輸入多行,並將 use strict 放在最上方,如下所示

'use strict'; <Shift+Enter for a newline>
//  ...your code
<Enter to run>

它可以在大多數瀏覽器中使用,例如 Firefox 和 Chrome。

如果不行,例如在舊瀏覽器中,有一個難看但可靠的方法可以確保 use strict。將它放在這種包裝函式內

(function() {
  'use strict';

  // ...your code here...
})()

我們應該「嚴格使用」嗎?

這個問題聽起來很明顯,但並非如此。

有人建議以 "use strict" 開始腳本… 但你知道什麼很酷嗎?

現代 JavaScript 支援「類別」和「模組」——進階語言結構(我們一定會接觸到它們),它們會自動啟用 use strict。因此,如果我們使用它們,就不需要新增 "use strict" 指令。

因此,目前 "use strict"; 是腳本開頭受歡迎的訪客。稍後,當你的程式碼都放在類別和模組中時,你可以省略它。

目前,我們必須大致了解 use strict

在接下來的章節中,當我們學習語言功能時,我們將看到嚴格模式和舊模式之間的差異。幸運的是,差異並不多,而且它們實際上讓我們的程式碼更佳。

除非另有說明(極少見),本教學課程中的所有範例都假設為嚴格模式。

教學課程地圖

註解

在註解之前先閱讀這段…
  • 如果你有建議要改進的地方,請 提交 GitHub 議題 或提交 pull request,而不是發表註解。
  • 如果你無法理解文章中的某個部分,請詳細說明。
  • 若要插入幾行程式碼,請使用 <code> 標籤,若要插入多行,請將它們包覆在 <pre> 標籤中,若要插入 10 行以上,請使用沙盒 (plnkrjsbincodepen…)