【JS】JavaScript的嚴格模式('use strict')

什么是嚴格模式

"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)鍵字
    1. implements
    2. interface
    3. let
    4. package
    5. private
    6. protected
    7. public
    8. static
    9. yield

(以上信息多數(shù)參考于https://www.runoob.com/js/js-strict.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末富拗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鸣戴,更是在濱河造成了極大的恐慌啃沪,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窄锅,死亡現(xiàn)場離奇詭異创千,居然都是意外死亡,警方通過查閱死者的電腦和手機入偷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門追驴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人疏之,你說我怎么就攤上這事殿雪。” “怎么了锋爪?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵丙曙,是天一觀的道長爸业。 經(jīng)常有香客問我,道長亏镰,這世上最難降的妖魔是什么扯旷? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮索抓,結(jié)果婚禮上钧忽,老公的妹妹穿的比我還像新娘。我一直安慰自己逼肯,他們只是感情好耸黑,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著篮幢,像睡著了一般崎坊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洲拇,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音曲尸,去河邊找鬼赋续。 笑死,一個胖子當(dāng)著我的面吹牛另患,可吹牛的內(nèi)容都是我干的纽乱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼昆箕,長吁一口氣:“原來是場噩夢啊……” “哼鸦列!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鹏倘,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤薯嗤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纤泵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骆姐,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年捏题,在試婚紗的時候發(fā)現(xiàn)自己被綠了玻褪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡公荧,死狀恐怖带射,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情循狰,我是刑警寧澤窟社,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布券勺,位于F島的核電站,受9級特大地震影響桥爽,放射性物質(zhì)發(fā)生泄漏朱灿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一钠四、第九天 我趴在偏房一處隱蔽的房頂上張望盗扒。 院中可真熱鬧,春花似錦缀去、人聲如沸侣灶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褥影。三九已至,卻和暖如春咏雌,著一層夾襖步出監(jiān)牢的瞬間凡怎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工赊抖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留统倒,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓氛雪,卻偏偏與公主長得像房匆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子报亩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容