要選擇進入嚴格模式,可以使用嚴格模式的編譯指示: 支持嚴格模式的引擎會自動啟用這種模式,而不支持該模式的引擎就當遇到了一個未賦值的字元串字面量,會忽略這個編譯指示。 如果是在全局作用於中給出這個編譯指示,則整個腳本都將使用嚴格模式。也可選擇只在函數中打開嚴格模式。 嚴格模式下: 1. 給一個沒有使用 ...
要選擇進入嚴格模式,可以使用嚴格模式的編譯指示:
'use strict';
支持嚴格模式的引擎會自動啟用這種模式,而不支持該模式的引擎就當遇到了一個未賦值的字元串字面量,會忽略這個編譯指示。
如果是在全局作用於中給出這個編譯指示,則整個腳本都將使用嚴格模式。也可選擇只在函數中打開嚴格模式。
1 function doSomething () { 2 'use strict'; 3 // do something 4 }
嚴格模式下:
1. 給一個沒有使用 var 聲明的變數賦值,代碼會在執行時拋出 ReferenceError ;對變數調用 delete 操作符(非嚴格模式允許這樣做,但會靜默失敗)會拋出 ReferenceError 。
2. 為只讀屬性賦值、對不可配置的屬性使用 delete 操作符、為不可擴展的對象添加屬性 均會拋出 TypeError 。
3. 要求命名函數的參數必須唯一,以及此時訪問 arguments.callee 和 arguments.caller 會拋出 TypeError 。嚴格模式下只能在腳本的頂級和函數內部聲明函數。(也就是說,在 if 語句中聲明函數會導致語法錯誤)
4. eval() 中聲明的變數不會成為局部變數,而是只能在被求值的特殊作用域中有效,隨後就將被銷毀。
5. 禁止使用 eval 和 arguments 作為標識符,也不允許讀寫他們的值。
6. 函數的 this 值始終是指定的值,無論指定的是什麼值。不會出現非嚴格模式中使用 apply() 和 call() 方法時,null 和 undefined 值被轉換為全局對象的情況。