最新的Web開發教程
 

JavaScript使用嚴格


"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";
x = 3.14;       // This will cause an error (x is not defined)
試一試»

"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"指令只在一個腳本或函數的開始認可。