js嚴格模式總結

使用方式:'use strict';

  • 爲某個script標籤開啓嚴格模式
  • 爲某個函數開啓嚴格模式

嚴格模式有哪些不同呢

  1. 將拼寫錯轉成異常
    • 未聲明的變量不能賦值。可以防止意外創建全局變量。
    • 嚴格模式會使引起靜默失敗(silently fail,注:不報錯也沒有任何效果)的賦值操拋出異常. 例如, NaN 是一個不可寫的全局變量. 在正常模式下, 給 NaN 賦值不會產生任何作用; 開發者也不會受到任何錯誤反饋. 但在嚴格模式下, 給 NaN 賦值會拋出一個異常. 任何在正常模式下引起靜默失敗的賦值操作 (給不可寫屬性賦值, 給只讀屬性(getter-only)賦值賦值, 給不可擴展對象(non-extensible object)的新屬性賦值) 都會拋出異常。
    • 在嚴格模式下, 試圖刪除不可刪除的屬性時會拋出異常(之前這種操作不會產生任何效果)。
    • 重名屬性,SyntaxError。
    • 重名參數,SyntaxError。
    • 進制八進制數字語法。
    • 進製爲原始值設置屬性,TypeError。
  2. 簡化變量使用
    • 禁用with
    • eval不再爲上層範圍引入新變量
    • 嚴格模式禁止刪除聲明變量
  3. 讓eval和arguments變得簡單
    • 名稱 eval 和 arguments 不能通過程序語法被綁定(be bound)或賦值. (成爲了關鍵字)
    • 參數的值不會隨 arguments 對象的值的改變而變化。函數的 arguments 對象會保存函數被調用時的原始參數。
    • 不再支持 arguments.callee。
  4. 安全的Javascript

    • fun.caller和fun.arguments不再使用
    • arguments.callee
    • 函數單獨調用時this不默認指向window,用bind綁定this時不進行包裝。
      "use strict";
      function fun() { return this; }
      console.assert(fun() === undefined);//true
      console.assert(fun.call(2) === 2);//true
      console.assert(fun.apply(null) === null);//true,正常模式下返回window
      console.assert(fun.call(undefined) === undefined);//true,正常模式下返回window
      console.assert(fun.bind(true)() === true);//true
  5. 爲未來的ECMAScript版本鋪平道路

    • 一部分字符變成了保留的關鍵字。這些字符包括implements, interface, let, package, private, protected, public, static和yield。在嚴格模式下,你不能再用這些名字作爲變量名或者形參名。
    • 嚴格模式禁止了不在腳本或者函數層面上的函數聲明。(在if和for中不能聲明函數)
      Mozilla MDN
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章