文章目錄
- 嚴格模式
-
- 使用"use strict"指令
- 為什麼使用嚴格模式?
- 嚴格模式的限制
嚴格模式
嚴格模式就是在嚴格的條件下運作
使用"use strict"指令
"use strict"指令在ES5中增加的。
他不是一個語句,但是是一個字面量表達式,向後相容。
嚴格模式下你不能使用未聲明的變量。
"use strict"指令隻允許出現在腳本或者函數的開頭
為什麼使用嚴格模式?
消除JavaScript文法的一些不合理、不嚴謹之處,減少一個怪異行為。
- 消除代碼運作的一些不安全之處,保證代碼運作的安全;
- 提高編譯器效率,增加運作速度;
- 為未來新版本的JavaScript做好鋪墊
"嚴格模式"展現了JavaScript更合理、更安全、更嚴謹的發展方向,包括微軟的IE10都已經支援它。
另一方面,同樣的代碼。在嚴格模式下,可能會有不一樣的運作結果,一些正常模式下的運作的語句,可能在嚴格模式下不能運作。
嚴格模式的限制
1.不允許使用未聲明的變量
"use strict";
x = 3.14; // ReferenceError
2.不允許删除變量或對象
"use strict"
var x = 3.14;
delete x // SyntaxError: Delete of an unqualified identifier in strict mode.
3.不允許删除函數
"use strict"
function f() {
return 1;
}
delete f //SyntaxError: Delete of an unqualified identifier in strict mode.
4.不允許變量重名
"use strict"
function f(x,x) { // SyntaxError: Duplicate parameter name not allowed in this context
return 1;
}
5.不允許使用不标準的八進制表示法
"use strict"
var x = 012 //SyntaxError: Octal literals are not allowed in strict mode.
6.不允許使用轉義字元
"use strict"
var x = "\012"; //SyntaxError: Octal escape sequences are not allowed in strict mode.
7.不允許隻讀屬性指派
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // TypeError: Cannot assign to read only property 'x' of object '#<Object>'
8.不允許對一個shiyo-nggetter方法讀取的屬性指派
"use strict";
var obj = {get x() {return 0} };
obj.x = 3.14; // Cannot set property x of #<Object> which has only a getter
9.不允許删除一個不允許删除的屬性
"use strict";
delete Object.prototype; // TypeError: Cannot delete property 'prototype' of function Object() { [native code] }
10.由于一個安全原因,在作用域eval()建立的變量不能被調用
"use strict";
eval("var x = 2");
console.log(x); //ReferenceError: x is not defined
11.不允許出現下面這種語句
"use strict";
with (Math){x = cos(2)}; // SyntaxError: Strict mode code may not include a with statement
12.以下關鍵字不能作為變量名
- arguments
- eval
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
更多保留關鍵字