JavaScript嚴格模式與非嚴格模式之間的區別

嚴格模式 非嚴格模式
禁止使用with語句 允許使用with語句
所有變量要先聲明 使用未聲明的變量將隱式聲明為全局變量
函數(非方法)中的this是undefined this是全局對象
call()和apply()傳入的第一個值不會被轉換 call()和apply()傳入的第一個值如果是null和undefined,則會被全局對象取代,如果是原始值則轉換為對應的包裝對象
給隻讀屬性和不可擴展的對象創建新成員將拋出類型錯誤異常 隻是簡單的操作失敗
傳入eval()的代碼不能在定義變量和函數 變量和函數定義在eval()創建的新作用域中
函數中的arguments對象擁有傳入函數值的靜態副本  
delete後跟非法標識符將拋出語法錯誤異常 隻是簡單的返回false
delete刪除不可配置的屬性將拋出類型錯誤異常 隻是簡單的返回false
在對象直接量中定義多個同名屬性將產生語法錯誤 不會報錯
函數聲明存在多個同名的參數將產生語法錯誤 不會報錯
不允許使用八進制直接量 某些實現是允許的
eval和arguments當作關鍵字,並且不允許更改  
限制瞭對棧的檢測能力,arguments.caller和arguments.callee將拋出類型錯誤異常  

測試是否開啟嚴格模式

var hasStrictMode = function() {
    "use strict";
    return this === undefined
}

發佈留言