嚴(yán)格模式對正常的Javacript語義做了一些更改:
1.嚴(yán)格模式消除了一些 JavaScript的靜默錯誤,通過改變它們來拋出錯誤宿稀。
2.嚴(yán)格的模式修復(fù)了 JavaScript引擎難以執(zhí)行優(yōu)化的錯誤:有時候趁舀,嚴(yán)格模式代碼可以比非嚴(yán)格模式的相同的代碼運行得更快。
3.嚴(yán)格模式禁用了在ECMAScript的未來版本中可能會定義的一些語法祝沸。
行為
使拼寫錯轉(zhuǎn)為異常
1.無法再意外創(chuàng)建全局變量
2.引起靜默失敗
// 給不可寫屬性賦值
var obj1 = {};
Object.defineProperty(obj1, "x", { value: 42, writable: false });
obj1.x = 9; // 拋出TypeError錯誤
// 給只讀屬性賦值
// 給不可擴展對象的新屬性賦值
3.試圖刪除不可刪除的屬性時會拋出異常
4.不允許同名屬性
5.函數(shù)參數(shù)名唯一
6.禁止八進制數(shù)字語法
7.禁止設(shè)置primitive值的屬性
(function() {
"use strict";
false.true = ""; //TypeError
(14).sailing = "home"; //TypeError
"with".you = "far away"; //TypeError
})();
簡化變量的使用
8.禁用with
9.禁止刪除聲明變量
"use strict";
var x;
delete x; // !!! 語法錯誤
eval("var y; delete y;"); // !!! 語法錯誤
讓eval和arguments變的簡單
10.名稱 eval 和 arguments 不能通過程序語法被綁定(be bound)或賦值
11.參數(shù)的值不會隨 arguments 對象的值的改變而變化
12.不再支持 arguments.callee
為未來的ECMAScript版本鋪平道路
13.一部分字符變成了保留的關(guān)鍵字
14.禁止了不在腳本或者函數(shù)層面上的函數(shù)聲明
"use strict";
if (true){
function f() { } // !!! 語法錯誤
f();
}
for (var i = 0; i < 5; i++){
function f2() { } // !!! 語法錯誤
f2();
}
function baz() { // 合法
function eit() { } // 同樣合法
}