JS中的嚴(yán)格模式

嚴(yán)格模式的簡(jiǎn)單說(shuō)明

為什么使用嚴(yán)格模式:

  • 消除Javascript語(yǔ)法的一些不合理垒在、不嚴(yán)謹(jǐn)之處惭墓,減少一些怪異行為;

  • 消除代碼運(yùn)行的一些不安全之處咬腕,保證代碼運(yùn)行的安全壶硅;

  • 提高編譯器效率徒探,增加運(yùn)行速度瓦呼;

  • 為未來(lái)新版本的Javascript做好鋪墊。

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

另一方面,同樣的代碼侦另,在"嚴(yán)格模式"中秩命,可能會(huì)有不一樣的運(yùn)行結(jié)果;一些在"正常模式"下可以運(yùn)行的語(yǔ)句褒傅,在"嚴(yán)格模式"下將不能運(yùn)行弃锐。掌握這些內(nèi)容,有助于更細(xì)致深入地理解Javascript殿托,讓你變成一個(gè)更好的程序員霹菊。

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

進(jìn)入嚴(yán)格模式的方法很簡(jiǎn)單,只需要在腳本或者函數(shù)的開頭輸入"use strict"即可支竹,值得一提的是旋廷,在無(wú)法執(zhí)行嚴(yán)格模式的舊版瀏覽器中(IE10之前),該條指令會(huì)自動(dòng)被忽略礼搁。

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

"use strict";
x = 1;          // Uncaught ReferenceError: x is not defined

限制2:嚴(yán)格模式定義在腳本開頭饶碘,會(huì)對(duì)整個(gè)腳本執(zhí)行嚴(yán)格模式

"use strict";
function fn () {
  x = 1;            // Uncaught ReferenceError: x is not defined
}
fn();

限制3:如果嚴(yán)格模式定義在函數(shù)頭部,那么只在當(dāng)前函數(shù)中使用嚴(yán)格模式馒吴,對(duì)函數(shù)外部的代碼沒(méi)有影響扎运。

x = 1;//不報(bào)錯(cuò)
function fn () {
  "use strict"
  y = 2;            // Uncaught ReferenceError: y is not defined
}
fn();

限制4:在嚴(yán)格模式下饮戳,不能對(duì)對(duì)象的只讀屬性賦值

"use strict";

// 給不可寫屬性賦值
var obj1 = {};
Object.defineProperty(obj1, "x", { value: 42, writable: false });
obj1.x = 9; // 拋出TypeError錯(cuò)誤


// 給不可擴(kuò)展對(duì)象的新屬性賦值
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = "ohai"; // 拋出TypeError錯(cuò)誤

限制5:在嚴(yán)格模式下豪治,試圖刪除不可刪除的屬性時(shí),會(huì)拋出異常

"use strict";
delete Object.prototype; // 拋出TypeError錯(cuò)誤

限制6:在嚴(yán)格模式下扯罐,不允許重名屬性

"use strict";
var o = { p: 1, p: 2 }; // 語(yǔ)法錯(cuò)誤

限制7:嚴(yán)格模式要求函數(shù)參數(shù)名唯一

function sum(a, a, c){ // 語(yǔ)法錯(cuò)誤
  "use strict";
  return a + a + c; // 代碼運(yùn)行到這里會(huì)出錯(cuò)
}

限制8:禁止八進(jìn)制數(shù)字語(yǔ)法

"use strict";
var sum = 015 + // 語(yǔ)法錯(cuò)誤
          197 +
          142;

限制8:禁止設(shè)置原始類型(primitive)值的屬性

(function() {
  "use strict";
  false.true = "";              //TypeError
  (14).sailing = "home";        //TypeError
  "with".you = "far away";      //TypeError
})();

限制10:禁用with

限制11:嚴(yán)格模式下负拟,eval()創(chuàng)建變量不能被調(diào)用

"use strict";
eval ("var x = 2");
alert (x);                      // Uncaught ReferenceError: x is not defined

限制12:嚴(yán)格模式禁止刪除聲明變量

"use strict";

var x;
delete x; // 語(yǔ)法錯(cuò)誤

限制13:不能使用evalarguments作為標(biāo)識(shí)

"use strict";
var arguments = 1;// Uncaught SyntaxError: Unexpected eval or arguments in strict mode
var eval = 2;     // Uncaught SyntaxError: Unexpected eval or arguments in strict mode

限制14:嚴(yán)格模式下,函數(shù)的 arguments 對(duì)象會(huì)保存函數(shù)被調(diào)用時(shí)的原始參數(shù)歹河。arguments[i] 的值不會(huì)隨與之相應(yīng)的參數(shù)的值的改變而變化掩浙,同名參數(shù)的值也不會(huì)隨與之相應(yīng)的 arguments[i] 的值的改變而變化。

"use strict";
function f(a,b) {
    a=10;
    console.log(arguments[0]);//1
    arguments[0] = 20;
    console.log(a);//10
}
f(1,2);

限制15:不再支持arguments.callee

"use strict";
var f = function() { return arguments.callee; };
f();                // TypeError

限制16:保留部分關(guān)鍵字秸歧,這些字符包括implements, interface, let, package, private, protected, public, static和yield厨姚。在嚴(yán)格模式下,你不能再用這些名字作為變量名或形參名寥茫。

限制17:禁止this指向全局對(duì)象遣蚀,當(dāng)this指向全局對(duì)象時(shí)矾麻,自動(dòng)轉(zhuǎn)為undefined

總結(jié)

當(dāng)你想要提升原生JS代碼的健壯性和可讀性纱耻,回避JS一些被人詬病的語(yǔ)法芭梯,嚴(yán)格模式是你不二的選擇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弄喘,一起剝皮案震驚了整個(gè)濱河市玖喘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蘑志,老刑警劉巖累奈,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異急但,居然都是意外死亡澎媒,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門波桩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)戒努,“玉大人,你說(shuō)我怎么就攤上這事镐躲〈⒚担” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵萤皂,是天一觀的道長(zhǎng)撒穷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)裆熙,這世上最難降的妖魔是什么端礼? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮弛车,結(jié)果婚禮上齐媒,老公的妹妹穿的比我還像新娘。我一直安慰自己纷跛,他們只是感情好喻括,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贫奠,像睡著了一般唬血。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唤崭,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天拷恨,我揣著相機(jī)與錄音,去河邊找鬼谢肾。 笑死腕侄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冕杠,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼微姊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了分预?” 一聲冷哼從身側(cè)響起兢交,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笼痹,沒(méi)想到半個(gè)月后配喳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凳干,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年晴裹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片救赐。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡息拜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出净响,到底是詐尸還是另有隱情少欺,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布馋贤,位于F島的核電站赞别,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏配乓。R本人自食惡果不足惜仿滔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望犹芹。 院中可真熱鬧崎页,春花似錦、人聲如沸腰埂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)屿笼。三九已至牺荠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驴一,已是汗流浹背休雌。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肝断,地道東北人杈曲。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓驰凛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親担扑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洒嗤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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

  • 除了正常的運(yùn)行模式,JavaScript還有第二種運(yùn)行模式:“嚴(yán)格模式”(strict mode)魁亦。顧名思義,這種...
    許先生__閱讀 439評(píng)論 0 1
  • 參考文章:嚴(yán)格模式 1.設(shè)計(jì)目的 早期的 JavaScript 語(yǔ)言有很多設(shè)計(jì)不合理的地方羔挡,但是為了兼容以前的代碼...
    chrisghb閱讀 669評(píng)論 0 0
  • 轉(zhuǎn)自:腳本之家 轉(zhuǎn)載 時(shí)間:2016-09-24我要評(píng)論 在 JavaScript 的嚴(yán)格模式下洁奈,對(duì) JavaSc...
    Michael_林閱讀 416評(píng)論 1 1
  • 作者:阮一峰 日期:2013年1月14日 轉(zhuǎn)載:http://www.ruanyifeng.com/blog/20...
    走在陽(yáng)光里_358a閱讀 244評(píng)論 0 0
  • 一、概述 除了正常運(yùn)行模式绞灼,ECMAscript 5添加了第二種運(yùn)行模式:"嚴(yán)格模式"(strict mode)利术。...
    才気莮孒閱讀 193評(píng)論 0 1