js中的嚴格模式和非嚴格模式的比較

前言

es5的嚴格模式是採用具備限制性JavaScript變體的一種方式,從而使代碼顯示地脫離‘懶散模式/非嚴格模式’javascript

嚴格模式

  1. 嚴格模式經過拋出錯誤來消除一些原有靜默錯誤java

  2. 嚴格模式修復了一些致使JavaScript引擎難以優化的缺陷:有時候,相同的代碼,嚴格模式能夠比非嚴格模式下運行得更快。瀏覽器

  3. 嚴格模式禁用了在ECMAScript將來版本中可能會定義的一些語法。安全

開啓嚴格模式

在整個腳本文件或者函數體開頭,寫入'use strict'語句。ecmascript

將拼寫錯誤轉成異常

  1. 沒法再意外建立全局變量,會拋出錯誤。ReferenceError.: *** is not definedide

  2. 引發靜默失敗的賦值操做拋出異常。 TypeError: ...函數

  3. 試圖刪除不可刪除的屬性時會拋出異常。TypeError: ...優化

  4. 要求函數的參數名惟一。SyntaxError: Duplicate parameter name not allowed in this contextthis

  5. 禁止八進制數字語法。SyntaxError: Octal literals are not allowed in strict mode.es5

  6. 禁止設置原始類型值的屬性。TypeError: ...

簡化變量的使用

  1. 禁用with

  2. eval再也不爲上層範圍引入新變量。

    在嚴格模式下eval僅僅爲被運行的代碼建立變量。因此eval不會使得名稱映射到外部變量或者其餘局部變量。

  3. 禁止刪除聲明變量。delete name在嚴格模式下會引發語法錯誤。SyntaxError: Delete of an unqualified identifier in strict mode.

evalarguments變的簡單

  1. evalarguments不能經過程序語法被綁定賦值。

  2. 參數的值不會隨arguments對象的值的改變而變化。

  3. 再也不支持argument.callee

「安全的」JavaScript

  1. 經過this傳遞給一個函數的值不會被強制轉換爲一個對象。

  2. 不再能經過普遍實現的ECMAScript擴展「遊走於」JavaScript的棧中。

  3. 函數的參數不在提供對相應函數調用變量的訪問。

爲將來的ECMAScript版本鋪平道路

  1. 保留了一部分字符做爲關鍵字。好比implements,interface,let,package,private,protected,public,staticyield

  2. 禁止了不在腳本或者函數層面上的函數聲明

瀏覽器的嚴格模式

主流瀏覽器如今實現了嚴格模式。可是也有大量瀏覽器只支持部分嚴格模式或者根本就不支持,因此不要盲目依賴嚴格模式。

參考MDN

相關文章
相關標籤/搜索