網站搜尋

javascript - TypeScript 檔案中需要使用 "Use Strict" 嗎?


我看過一些關於在 TypeScript 代碼文件中應該把 "use strict" 放在哪裡的帖子。我的問題是,為什麼要有它呢?

既然 TypeScript 已經是一種強型別語言,『use strict』還能增加什麼?

答案#1

更新

  • TypeScript 1.8+: "use strict"; 會在模組中產生(閱讀更多)。
  • TypeScript 2.1+: --alwaysStrict 編譯器選項會解析所有嚴格模式下的檔案,並在所有輸出檔案頂端發出「use strict」字樣(閱讀更多)。

您可以透過搜尋 TypeScript 的測試中「in strict mode」來找到一些範例的列表。

這裡有一些程式範例,只有在你 "use strict"; 時才會產生編譯時錯誤:

// future reserved keyword not allowed as variable name
var let,
    yield,
    public,
    private,
    protected,
    static,
    implements;

// "delete" cannot be called on an identifier
var a;
delete a;

// octal literals not allowed
03;

還有一些例子,其中 "use strict"; 只有在運行時才會拋出錯誤。例如:

"use strict";
delete Object.prototype;

就個人而言,我並不覺得它在防止我在 TypeScript 中犯錯方面特別有用,而且它為檔案增加的額外噪音讓我不想去寫它。話雖如此,從 TS 2.1 開始,我會啟用 --alwaysStrict 編譯器選項,因為它增加了輕微的額外嚴格性,而不會帶來任何程式碼維護負擔。

答案#2

依我看,是的,"use strict"; 應該包含在 TypeScript 檔案中。

忽略 編譯時 "use strict"; 對 TypeScript 的影響,當生成的 JavaScript 被執行時,很可能會有 運行時 的影響:

  • MDN 指出,在函數調用中避免對 this 進行裝箱以及移除 function.caller 和 function.arguments 屬性能上有所改善。

  • Mozilla 的 Jeff Walden 在這個回答中也暗示了性能提升的機會。