1.為什么用嚴(yán)格模式
- 消除Javascript語法的一些不合理、不嚴(yán)謹(jǐn)之處饲趋,減少一些怪異行為;
- 消除代碼運行的一些不安全之處拐揭,保證代碼運行的安全;
- 提高編譯器效率奕塑,增加運行速度堂污;
- 為未來新版本的Javascript做好鋪墊。
2. 進(jìn)入標(biāo)志
"use strict";
3.如何調(diào)用
//針對單個腳本
<script>
"use strict";
console.log("這是嚴(yán)格模式龄砰。");
</script>
//針對單個函數(shù)
function strict(){
"use strict";
return "這是嚴(yán)格模式盟猖。";
}
4.嚴(yán)格模式對Javascript的語法和行為,都做了一些改變换棚。
4.1 全局變量顯式聲明
在正常模式中式镐,如果一個變量沒有聲明就賦值,默認(rèn)是全局變量固蚤。嚴(yán)格模式禁止這種用法碟案,全局變量必須顯式聲明。
"use strict";
v = 1; // 報錯颇蜡,v未聲明
for(i = 0; i < 2; i++) { // 報錯价说,i未聲明
}
4.2 禁止this關(guān)鍵字指向全局對象
function f(){
return !this;
} // 返回false,因為"this"指向全局對象风秤,"!this"就是false
function f(){
"use strict";
return !this;
} // 返回true鳖目,因為嚴(yán)格模式下,this的值為undefined缤弦,所以"!this"為true领迈。
因此,使用構(gòu)造函數(shù)時,如果忘了加new狸捅,this不再指向全局對象衷蜓,而是報錯。
function f(){
"use strict";
this.a = 1;
};
f();// 報錯尘喝,this未定義
4.3禁止刪除變量
嚴(yán)格模式下無法刪除變量磁浇。只有configurable設(shè)置為true的對象屬性,才能被刪除朽褪。
"use strict";
var x;
delete x; // 語法錯誤
var o = Object.create(null, {'x': {
value: 1,
configurable: true
}});
delete o.x; // 刪除成功
4.4對象不能有重名的屬性
正常模式下置吓,如果對象有多個重名屬性,最后賦值的那個屬性會覆蓋前面的值缔赠。嚴(yán)格模式下衍锚,這屬于語法錯誤。
"use strict";
var o = {
p: 1,
p: 2
}; // 語法錯誤
4.5函數(shù)不能有重名的參數(shù)
正常模式下嗤堰,如果函數(shù)有多個重名的參數(shù)戴质,可以用arguments[i]讀取。嚴(yán)格模式下踢匣,這屬于語法錯誤置森。
"use strict";
function f(a, a, b) { // 語法錯誤
return ;
}