什么是嚴格模式
"use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。
它不是一條語句鸟妙,但是是一個字面量表達式,在 JavaScript 舊版本中會被忽略。
"use strict" 的目的是指定代碼在嚴格條件下執(zhí)行。
嚴格模式下你不能使用未聲明的變量芦岂。
支持嚴格模式的瀏覽器:
Internet Explorer 10 +、 Firefox 4+ Chrome 13+垫蛆、 Safari 5.1+禽最、 Opera 12+腺怯。
如何使用嚴格模式
嚴格模式的使用,只需要在腳本或者函數(shù)的頭部加入如下代碼即可:
'use strict'
嚴格模式有什么優(yōu)點與缺點
優(yōu)點
- 自動檢查JavaScript中一些不嚴謹川无、不合理的代碼與用法呛占,以及一些可能不安全的隱患處,保證代碼的穩(wěn)定性
- 自動檢查未聲明變量懦趋、重復(fù)參數(shù)等等節(jié)約開發(fā)排錯時間晾虑,使調(diào)試更加容易
缺點
- 現(xiàn)在網(wǎng)站的 JS 都會進行壓縮,一些文件用了嚴格模式仅叫,而另一些沒有帜篇。這時這些本來是嚴格模式的文件,被 merge 后诫咱,這個串就到了文件的中間笙隙,不僅沒有指示嚴格模式,反而在壓縮后浪費了字節(jié)坎缭。
(缺點的說法來源于網(wǎng)絡(luò)資料竟痰,實際性尚未驗證)
嚴格模式的主要限制
- 不允許使用未聲明的變量
"use strict";
x = 3.14; // 報錯 (x 未定義)
- 不允許刪除變量或?qū)ο?/li>
"use strict";
var x = 3.14;
delete x; // 報錯
- 不允許刪除函數(shù)
"use strict";
function x(p1, p2) {};
delete x; // 報錯
- 不允許變量重名
"use strict";
function x(p1, p1) {}; // 報錯
- 不允許使用八進制
"use strict";
var x = 010; // 報錯
- 不允許使用轉(zhuǎn)義字符
"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() 創(chuàng)建的變量不能被調(diào)用
"use strict";
eval ("var x = 2");
alert (x); // 報錯
- 禁止this關(guān)鍵字指向全局對象
function f(){
return !this;
}
// 返回false掏呼,因為"this"指向全局對象坏快,"!this"就是false
function f(){
"use strict";
return !this;
}
// 返回true,因為嚴格模式下,this的值為undefined,所以"!this"為true焦蘑。
- 為了向?qū)鞪avascript的新版本過渡,嚴格模式新增了一些保留關(guān)鍵字
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
(以上信息多數(shù)參考于https://www.runoob.com/js/js-strict.html)