js中的嚴格模式和非嚴格模式的比較
前言
es5的嚴格模式是采用具有限制性JavaScript變體的一種方式,從而使代碼顯示地脫離‘懶散模式/非嚴格模式’
嚴格模式
-
嚴格模式通過拋出錯誤來消除一些原有靜默錯誤
-
嚴格模式修復(fù)了一些導(dǎo)致JavaScript引擎難以優(yōu)化的缺陷:有時候,相同的代碼,嚴格模式可以比非嚴格模式下運行得更快。
-
嚴格模式禁用了在ECMAScript未來版本中可能會定義的一些語法。
開啟嚴格模式
在整個腳本文件或者函數(shù)體開頭,寫入'use strict'語句。
將拼寫錯誤轉(zhuǎn)成異常
-
無法再意外創(chuàng)建全局變量,會拋出錯誤。
ReferenceError.: *** is not defined -
引起靜默失敗的賦值操作拋出異常。
TypeError: ... -
試圖刪除不可刪除的屬性時會拋出異常。
TypeError: ... -
要求函數(shù)的參數(shù)名唯一。
SyntaxError: Duplicate parameter name not allowed in this context -
禁止八進制數(shù)字語法。
SyntaxError: Octal literals are not allowed in strict mode. -
禁止設(shè)置原始類型值的屬性。
TypeError: ...
簡化變量的使用
-
禁用
with -
eval不再為上層范圍引入新變量。在嚴格模式下
eval僅僅為被運行的代碼創(chuàng)建變量。所以eval不會使得名稱映射到外部變量或者其他局部變量。 -
禁止刪除聲明變量。
delete name在嚴格模式下會引起語法錯誤。SyntaxError: Delete of an unqualified identifier in strict mode.
讓eval和arguments變的簡單
-
eval和arguments不能通過程序語法被綁定賦值。 -
參數(shù)的值不會隨
arguments對象的值的改變而變化。 -
不再支持
argument.callee
“安全的”JavaScript
-
通過
this傳遞給一個函數(shù)的值不會被強制轉(zhuǎn)換為一個對象。 -
再也不能通過廣泛實現(xiàn)的ECMAScript擴展“游走于”JavaScript的棧中。
-
函數(shù)的參數(shù)不在提供對相應(yīng)函數(shù)調(diào)用變量的訪問。
為未來的ECMAScript版本鋪平道路
-
保留了一部分字符作為關(guān)鍵字。比如
implements,interface,let,package,private,protected,public,static和yield -
禁止了不在腳本或者函數(shù)層面上的函數(shù)聲明
瀏覽器的嚴格模式
主流瀏覽器現(xiàn)在實現(xiàn)了嚴格模式。但是也有大量瀏覽器只支持部分嚴格模式或者根本就不支持,所以不要盲目依賴嚴格模式。
出處:http://www.rzrgm.cn/weiqinl
個人主頁http://weiqinl.com
github: weiqinl
簡書:weiqinl
您的留言討論是對博主最大的支持!
本文版權(quán)歸作者所有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權(quán)利。

浙公網(wǎng)安備 33010602011771號