嚴(yán)格模式

ES5新增了嚴(yán)格模式(strict mode),嚴(yán)格模式在IE10以上版本的瀏覽器中才會(huì)被支持督禽,舊版本瀏覽器中會(huì)被忽略。

嚴(yán)格模式對(duì)正常的JavaScript語(yǔ)義做了一些更改:
1.消除Javascript語(yǔ)法的一些不合理穴张、不嚴(yán)謹(jǐn)之處,減少一些怪異行為;
2.消除代碼運(yùn)行的一些不安全之處巩剖,保證代碼運(yùn)行的安全;
3.提高編譯器效率钠怯,增加運(yùn)行速度佳魔;
4.為未來(lái)新版本的Javascript做好鋪墊。
禁用了ECMAScript的未來(lái)版本中可能會(huì)定義的一些語(yǔ)法晦炊,比如一些保留字如:class, enum, export, extends, import, super不能做變量名

"嚴(yán)格模式"體現(xiàn)了Javascript更合理鞠鲜、更安全、更嚴(yán)謹(jǐn)?shù)陌l(fā)展方向断国,包括IE 10在內(nèi)的主流瀏覽器贤姆,都已經(jīng)支持它,許多大項(xiàng)目已經(jīng)開(kāi)始全面擁抱它稳衬。

另一方面霞捡,同樣的代碼,在"嚴(yán)格模式"中薄疚,可能會(huì)有不一樣的運(yùn)行結(jié)果碧信;一些在"正常模式"下可以運(yùn)行的語(yǔ)句,在"嚴(yán)格模式"下將不能運(yùn)行街夭。掌握這些內(nèi)容音婶,有助于更細(xì)致深入地理解Javascript,讓你變成一個(gè)更好的程序員莱坎。

開(kāi)啟嚴(yán)格模式

嚴(yán)格模式可以應(yīng)用到整個(gè)腳本或個(gè)別函數(shù)中衣式。因此在使用時(shí),我們可以將嚴(yán)格模式分為為腳本開(kāi)啟嚴(yán)格模式和為函數(shù)開(kāi)啟嚴(yán)格模式兩種情況檐什。

使用 "use strict" 指令開(kāi)啟嚴(yán)格模式
"use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增碴卧。

它不是一條語(yǔ)句,但是是一個(gè)字面量表達(dá)式乃正,在 JavaScript 舊版本中會(huì)被忽略住册。

//為script全局開(kāi)啟嚴(yán)格模式
<script>
  'use strict';
</script>

//為腳本開(kāi)啟嚴(yán)格模式
<script>
  (function(){
    'use strict';
    ...
  })();
</script>

//為某個(gè)函數(shù)開(kāi)啟嚴(yán)格模式
<script>
  funtion fn(){
    'use strict';
    ...
  }
</script>

嚴(yán)格模式的限制

不允許使用未聲明的變量
"use strict";
x = 3.14;                // 報(bào)錯(cuò) (x 未定義)
對(duì)象也是一個(gè)變量
"use strict";
x = {p1:10, p2:20};      // 報(bào)錯(cuò) (x 未定義)
不允許刪除變量或?qū)ο?/h5>
"use strict";
var x = 3.14;
delete x;                // 報(bào)錯(cuò)
不允許刪除函數(shù)。
"use strict";
function x(p1, p2) {};
delete x;                // 報(bào)錯(cuò) 
不允許變量重名
"use strict";
function x(p1, p1) {};   // 報(bào)錯(cuò)
不允許使用八進(jìn)制
"use strict";
var x = 010;             // 報(bào)錯(cuò)
不允許使用轉(zhuǎn)義字符
"use strict";
var x = \010;            // 報(bào)錯(cuò)

不允許對(duì)只讀屬性賦值:
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14;            // 報(bào)錯(cuò)
不允許對(duì)一個(gè)使用getter方法讀取的屬性進(jìn)行賦值
"use strict";
var obj = {get x() {return 0} };

obj.x = 3.14;            // 報(bào)錯(cuò)
不允許刪除一個(gè)不允許刪除的屬性:
"use strict";
delete Object.prototype; // 報(bào)錯(cuò)
變量名不能使用 "eval" 字符串:
"use strict";
var eval = 3.14;         // 報(bào)錯(cuò)
變量名不能使用 "arguments" 字符串:
"use strict";
var arguments = 3.14;    // 報(bào)錯(cuò)
不允許使用以下這種語(yǔ)句
"use strict";
with (Math){x = cos(2)}; // 報(bào)錯(cuò)
由于一些安全原因瓮具,在作用域 eval() 創(chuàng)建的變量不能被調(diào)用:
"use strict";
eval ("var x = 2");
alert (x);               // 報(bào)錯(cuò)
禁止this關(guān)鍵字指向全局對(duì)象荧飞。
function f(){ 
  return  !this; 
}  
// 返回false,因?yàn)?this"指向全局對(duì)象名党,"!this"就是false  

function f(){
  "use strict"; return  !this;  
}  
// 返回true叹阔,因?yàn)閲?yán)格模式下,this的值為undefined传睹,所以"!this"為true耳幢。

因此,使用構(gòu)造函數(shù)時(shí),如果忘了加new睛藻,this不再指向全局對(duì)象启上,而是報(bào)錯(cuò)。

function f(){
  "use strict"; 
  this.a =  1;  
}; 
f();
// 報(bào)錯(cuò)店印,this未定義
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冈在,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子按摘,更是在濱河造成了極大的恐慌包券,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件院峡,死亡現(xiàn)場(chǎng)離奇詭異兴使,居然都是意外死亡系宜,警方通過(guò)查閱死者的電腦和手機(jī)照激,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盹牧,“玉大人俩垃,你說(shuō)我怎么就攤上這事√ⅲ” “怎么了口柳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)有滑。 經(jīng)常有香客問(wèn)我跃闹,道長(zhǎng),這世上最難降的妖魔是什么毛好? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任望艺,我火速辦了婚禮,結(jié)果婚禮上肌访,老公的妹妹穿的比我還像新娘找默。我一直安慰自己,他們只是感情好吼驶,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布惩激。 她就那樣靜靜地躺著,像睡著了一般蟹演。 火紅的嫁衣襯著肌膚如雪风钻。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天酒请,我揣著相機(jī)與錄音魄咕,去河邊找鬼。 笑死蚌父,一個(gè)胖子當(dāng)著我的面吹牛哮兰,可吹牛的內(nèi)容都是我干的毛萌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼喝滞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阁将!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起右遭,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤做盅,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后窘哈,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吹榴,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年滚婉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了图筹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡让腹,死狀恐怖远剩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骇窍,我是刑警寧澤瓜晤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站腹纳,受9級(jí)特大地震影響痢掠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嘲恍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一足画、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛔钙,春花似錦锌云、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至兼贡,卻和暖如春攻冷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遍希。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工等曼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓禁谦,卻偏偏與公主長(zhǎng)得像胁黑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子州泊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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