JavaScript嚴格模式介紹與總結

嚴格模式優勢:

消除Javascript語法的一些不合理、不嚴謹之處,減少一些意外情況出現;
消除代碼運行的一些不安全之處,保證代碼運行的安全;
提高編譯器效率,增加運行速度;
注意,同樣的代碼,在"嚴格模式"中,可能會有不一樣的運行結果;一些在"正常模式"下可以運行的語句,在"嚴格模式"下將不能運行。

嚴格模式的限制:

不允許使用未聲明的變量:

"use strict";
x = 3.14;                // 報錯 (x 未定義)

"use strict";
x = {p1:10, p2:20};      // 報錯 (x 未定義)

不允許刪除變量或對象。

"use strict";
var x = 3.14;
delete x;                // 報錯

不允許刪除函數。

"use strict";
function x(p1, p2) {}; 
delete x;                // 報錯 

不允許變量重名:

"use strict";
function x(p1, p1) {};   // 報錯

不允許使用八進制:

"use strict";
var x = 010;             // 報錯

不允許使用轉義字符:

"use strict";
var x = \010;            // 報錯

不允許對只讀屬性賦值:

"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;            // 報錯

不允許對一個使用getter方法讀取的屬性進行賦值

"use strict";
var obj = {get x() {return 0} };

obj.x = 3.14;            // 報錯

不允許刪除一個不允許刪除的屬性:

"use strict";
delete Object.prototype; // 報錯

變量名不能使用 "eval" 字符串:

"use strict";
var eval = 3.14;         // 報錯

變量名不能使用 "arguments" 字符串:

"use strict";
var arguments = 3.14;    // 報錯

不允許使用以下這種語句:

"use strict";
with (Math){x = cos(2)}; // 報錯

由於一些安全原因,在作用域 eval() 創建的變量不能被調用:

"use strict";
eval ("var x = 2");
alert (x);               // 報錯

禁止this關鍵字指向全局對象。

function f(){
    return !this;
} 
// 返回false,因爲"this"指向全局對象,"!this"就是false

function f(){ 
    "use strict";
    return !this;
} 
// 返回true,因爲嚴格模式下,this的值爲undefined,所以"!this"爲true。
因此,使用構造函數時,如果忘了加new,this不再指向全局對象,而是報錯。

function f(){
    "use strict";
    this.a = 1;
};
f();// 報錯,this未定義

保留關鍵字

爲了向將來Javascript的新版本過渡,嚴格模式新增了一些保留關鍵字:

implements
interface
let
package
private
protected
public
static
yield
"use strict";
var public = 1500;      // 報錯

更多信息參考:菜鳥教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章