ECMAScript 5引入了嚴(yán)格模式(strict mode),嚴(yán)格模式即在嚴(yán)格的條件下進(jìn)行,其中的一些不確定的行為得到處理。
嚴(yán)格模式
通過在腳本或函數(shù)的頭部添加"use strict";表達(dá)式來聲明。
支持嚴(yán)格模式的瀏覽器有ie 10+,Firefox 4+,chrome 13+,safari 5.1+,opera 12+。
使用嚴(yán)格模式的好處:
- 消除語法的不合理,不嚴(yán)謹(jǐn)之處,保證代碼的運(yùn)行安全
- 提高編譯器效率,增加運(yùn)行速度
- 為未來新版本的js做鋪墊
嚴(yán)格模式的限制
- 不允許使用未聲明的變量
對(duì)象也是一個(gè)變量。
"use strict"
x = {s1:100, s2:99}; //Uncaught ReferenceError: x is not defined
- 不允許對(duì)變量或函數(shù)使用delete操作符
"use strict"
var x = 1;
delete x; //Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
- 不允許變量重名
"use strict"
function fs(r1,r1) {
} //Uncaught SyntaxError: Duplicate parameter name not allowed in this context
- 不允許使用八進(jìn)制
"use strict"
var x = 012; //Uncaught SyntaxError: Octal literals are not allowed in strict mode.
- 拋棄with語句
"use strict"
var str = "hello";
with(str) {
console.log(toUpperCase());
}
//Uncaught SyntaxError: Strict mode code may not include a with statement
- 不可對(duì)只讀對(duì)象賦值,不可對(duì)不可配置對(duì)象使用delete操作符
"use strict"
console.log(Object.prototype);
delete Object.prototype; //Uncaught TypeError
console.log(Object.prototype);
- 禁止this關(guān)鍵字指向全局對(duì)象
"use strict"
function fs() {
console.log(this);
}
fs();
//undefined
- 不可在if內(nèi)部聲明函數(shù)
"use strict"
var a=0;
if(a<=2) {
function add() {
a++;
return a;
}
}
add(); //Uncaught ReferenceError: add is not defined
console.log(add()); //非嚴(yán)格模式下返回2