"use strict";定義JavaScript代碼應該“嚴格模式”執行。
在"use strict"指令
在"use strict"指令是在JavaScript中1.8.5新(ECMAScript version 5) 。
它不是一個聲明,但文字的表達,由以前版本的JavaScript忽略。
的目的"use strict"是表明該代碼應本著“嚴謹模式”下執行。
憑藉嚴格的模式,你不能,例如,使用未聲明的變量。
嚴格模式中支持:
IE從版本的Firefox 10。4版本。
Chrome從13版Safari從5.1版本。
Opera從12版。
聲明嚴格模式
嚴格模式是通過將宣布"use strict";一個腳本或函數的開始。
在腳本的開頭聲明的,它具有全局範圍(在腳本將嚴格模式下執行的所有代碼):
例
"use strict";
myFunction();
function myFunction() {
y = 3.14;
// This will also cause an error (y is not defined)
}
試一試» 一個函數中聲明,它具有局部範圍(僅裡面的代碼的功能是在嚴格模式下):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14;
// This will cause an error (y is not defined)
}
試一試» 在"use strict";語法
語法,宣告嚴格模式,被設計為與舊版本的JavaScript兼容。
編譯數字文字(4 + 5)或字符串文字("John Doe";)在JavaScript程序有沒有副作用。 它只是編譯成一個不存在的變量和死亡。
因此, "use strict" ; 只關係到新的編譯器“理解”的意思吧。
為什麼要嚴格模式?
嚴格模式可以更容易地編寫“安全”的JavaScript。
嚴格模式改變此前接受“語法錯誤”變成真正的錯誤。
作為一個例子,在一般的JavaScript,錯誤輸入變量名稱創建一個新的全局變量。 在嚴格模式下,這將拋出一個錯誤,因此無法意外創建一個全局變量。
在正常的JavaScript,開發人員將不會收到任何錯誤反饋給非可寫的屬性賦值。
在嚴格模式下,任何分配到不可寫的屬性,一個只吸氣屬性,一個不存在的屬性,一個不存在的變量,或者一個不存在的對象,將拋出一個錯誤。
在嚴格模式不允許
使用一個變量,未聲明的,是不允許的:
"use strict";
x = 3.14; // This
will cause an error (x is not defined)
對象是變量太多。
使用一個對象,未聲明的,是不允許的:
"use strict";
x =
{p1:10, p2:20}; // This
will cause an error (x is not defined)
刪除一個變量(或對象)是不允許的。
"use strict";
var x = 3.14;
delete x; // This
will cause an error
刪除功能是不允許的。
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
複製參數名稱是不允許的:
"use strict";
function x(p1, p1) {}; // This will cause an error
八進制數字文字不准:
"use strict";
var x = 010; // This
will cause an error
轉義字符不允許:
"use strict";
var x = \010; // This will cause an error
寫入只讀屬性是不允許的:
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
寫入只能獲得屬性是不允許的:
"use strict";
var obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
刪除不可刪除的屬性是不允許的:
"use strict";
delete Object.prototype; // This will cause an error
字符串“的eval”不能用作變量:
"use strict";
var eval = 3.14; // This will cause an error
字符串“參數”不能用作變量:
"use strict";
var arguments = 3.14; // This will cause an error
with語句是不允許的:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
出於安全原因, eval()是不允許創建從它被稱為變量的作用域:
"use strict";
eval ("var x = 2");
alert (x); // This
will cause an error
在函數調用像f() ,在這個值是全局對象。 在嚴格模式下,現在不確定。
面向未來!
未來保留關鍵字不是在嚴格模式允許的。 這些是:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict";
var public = 1500; // This will cause an error
小心!
小心!
在"use strict"指令只在一個腳本或函數的開始認可。