阮一峰的網(wǎng)絡(luò)日志——Javascript嚴(yán)格模式詳解
“嚴(yán)格模式”的目的消除javascript語法的一些不合理、不嚴(yán)謹(jǐn)之處,減少一些怪異行為;
消除代碼運(yùn)行的一些不安全之處,保證代碼運(yùn)行的安全;
提高編譯器效率,增加運(yùn)行速度;
為未來版本的JavaScript做好鋪墊
“嚴(yán)格模式”標(biāo)志(function(){ "use strict"; //code here })();語法的改變 全局變量顯示聲明
"use strict" v=1; //報(bào)錯(cuò),v未聲明 for(i=0;i<2;i++){ }//報(bào)錯(cuò),i未聲明靜態(tài)綁定 禁止使用with語句
"use strict" var v=1; with(o){ v=2; }//語法錯(cuò)誤創(chuàng)設(shè)eval作用域
正常模式下,javascript語言有兩種變量作用域(scope):全局作用域和函數(shù)作用域,嚴(yán)格模式創(chuàng)設(shè)了第三種作用域:eval作用域
嚴(yán)格模式下,eval作用域中生成的變量只能用于內(nèi)部
“use strict”; var x=2; console.info(eval("var x=5;x")); //5 console.info(x);//2增強(qiáng)的安全措施 禁止this關(guān)鍵字指向全局對(duì)象
function f(){ return !this; }//false function f(){ "use strict"; return !this; }//true,嚴(yán)格模式下this的值為undefined,!this的值為true function f(){ "use strict"; this.a = 1; }; f();//報(bào)錯(cuò),this未定義 只能使用new f(),將this的指向明確的對(duì)象禁止在函數(shù)內(nèi)部遍歷調(diào)用棧
function f1(){ "use strict"; f1.caller; //報(bào)錯(cuò) f1.arguments;//報(bào)錯(cuò) }禁止刪除變量
嚴(yán)格模式下無法刪除變量,只有configurable設(shè)置為true的對(duì)象屬性,才能被刪除
"use strict"; var x; delete x; //語法錯(cuò)誤 var o = Object.create(null, { "x":{value:1,configurable:true} }); delete o.x; //刪除成功顯式報(bào)錯(cuò)
正常模式下,對(duì)一個(gè)對(duì)象的只讀屬性進(jìn)行賦值,不會(huì)報(bào)錯(cuò),嚴(yán)格模式會(huì)
"use strict"; var o = {}; Object.defineProperty(o, {value:1, writable:false}); o.v = 2; //報(bào)錯(cuò)
嚴(yán)格模式下,對(duì)一個(gè)使用getter方法讀取的屬性進(jìn)行賦值,會(huì)報(bào)錯(cuò)
"use strict"; var o ={ get v(){return 1;} }; o.v = 2; //報(bào)錯(cuò)
嚴(yán)格模式下,對(duì)禁止擴(kuò)展的對(duì)象添加新屬性,會(huì)報(bào)錯(cuò)
"use strict"; var o ={}; Object.preventExtensions(o); o.v = 2; //報(bào)錯(cuò)重名錯(cuò)誤 對(duì)象不能有重名的屬性
"use strict"; var o = { p:1, p:2 };//語法錯(cuò)誤函數(shù)不能有重名的參數(shù)
"use strict"; function f(a, a, b) { // 語法錯(cuò)誤 return ; }禁止八進(jìn)制對(duì)法
正常模式下,整數(shù)的第一位如果是0,表示這是八進(jìn)制數(shù),比如0100等于十進(jìn)制的64。嚴(yán)格模式禁止這種表示法,整數(shù)第一位為0,將報(bào)錯(cuò)。
"use strict"; var n = 0100; // 語法錯(cuò)誤arguments對(duì)象的限制 不允許對(duì)arguments賦值
"use strict"; arguments++;//錯(cuò)誤 var obj = { set p(arguments) { } }; // 語法錯(cuò)誤 try { } catch (arguments) { } // 語法錯(cuò)誤 function arguments() { } // 語法錯(cuò)誤 var f = new Function("arguments", ""use strict"; return 17;"); // 語法錯(cuò)誤arguments不再跟蹤參數(shù)的變化
function f(a) { a = 2; return [a, arguments[0]]; } f(1); // 正常模式為[2,2] function f(a) { "use strict"; a = 2; return [a, arguments[0]]; } f(1); // 嚴(yán)格模式為[2,1]禁止使用arguments.callee
無法在匿名函數(shù)內(nèi)部調(diào)用自身
"use strict"; var f = function(){ return arguments.callee;}; f(); //報(bào)錯(cuò)函數(shù)必須聲明在頂層
"use strict"; if (true) { function f() { } // 語法錯(cuò)誤 } for (var i = 0; i < 5; i++) { function f2() { } // 語法錯(cuò)誤 }保留字
新增的一些保留字:implements, interface, let, package, private, protected, public, static, yield。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/80633.html
摘要:在嚴(yán)格模式中,當(dāng)運(yùn)算符后跟隨非法的標(biāo)識(shí)符比如變量函數(shù)函數(shù)參數(shù)時(shí),將會(huì)拋出一個(gè)語法錯(cuò)誤異常在非嚴(yán)格模式中,這種表達(dá)式什么也沒做,并返回。 JavaScript之use strict use strict是ECMAScript 5引入的一條指令。指令不是語句(但非常接近于語句)。usestrict指令和普通的語句之間有兩個(gè)重要的區(qū)別: 它不包含任何語言的關(guān)鍵字,指令僅僅是一個(gè)包含一個(gè)特殊...
摘要:一嚴(yán)格模式概述嚴(yán)格模式是什么在中是種限制性更強(qiáng)變種方式,不是個(gè)子集,在語義上與正常代碼有明顯得差異嚴(yán)格模式和非嚴(yán)格模式可共存,可選擇性的加入嚴(yán)格模式嚴(yán)格模式的目的將把陷阱直接變?yōu)槊黠@錯(cuò)誤修正一些引擎難以優(yōu)化錯(cuò)誤,代碼有些時(shí)候嚴(yán)格模式會(huì)比非嚴(yán) JS(JavaScript)一.嚴(yán)格模式1.概述 嚴(yán)格模式是什么 在JS中是種限制性更強(qiáng)變種方式,不是個(gè)子集,在語義上與正常代碼有明顯得差異嚴(yán)格模...
摘要:整個(gè)腳本文件就會(huì)以嚴(yán)格模式執(zhí)行。函數(shù)作用域范圍將放在函數(shù)體的第一行,則整個(gè)函數(shù)以嚴(yán)格模式運(yùn)行。嚴(yán)格模式下,必須指明的指向?qū)ο?。禁止在非函?shù)代碼塊聲明函數(shù)的嚴(yán)格模式只允許在全局作用域或函數(shù)作用域聲明函數(shù)。 ECMAScript 5 引入了 strict mode ,現(xiàn)在已經(jīng)被大多瀏覽器實(shí)現(xiàn)(從IE10開始) 一、什么是嚴(yán)格模式 顧名思義,JavaScript 嚴(yán)格模式就是讓 JS 代碼以...
摘要:嚴(yán)格模式描述嚴(yán)格模式可以分別作用在全局作用域中和函數(shù)作用域中嚴(yán)格模式是對(duì)代碼的一種限制方式嚴(yán)格模式可以將不明確顯示的錯(cuò)誤轉(zhuǎn)變成明確顯示嚴(yán)格模式可以修正一些解釋器難以優(yōu)化的錯(cuò)誤嚴(yán)格模式下的變量禁止意外創(chuàng)建變量沒有開啟嚴(yán)格模式時(shí)在調(diào)用該變量時(shí), 嚴(yán)格模式 描述 嚴(yán)格模式可以分別作用在全局作用域中和函數(shù)作用域中 嚴(yán)格模式是對(duì)JavaScript代碼的一種限制方式 嚴(yán)格模式可以將不明確顯...
摘要:概述的嚴(yán)格模式是中的一種限制性更強(qiáng)的變種方式。嚴(yán)格模式在語義上與正常的有一些不同。首先,嚴(yán)格模式會(huì)將陷阱直接變成明顯的錯(cuò)誤。嚴(yán)格模式禁止刪除聲明變量。 概述 ECMAScript 5的嚴(yán)格模式是JavaScript中的一種限制性更強(qiáng)的變種方式。嚴(yán)格模式不是一個(gè)子集:它在語義上與正常代碼有著明顯的差異。不支持嚴(yán)格模式的瀏覽器與支持嚴(yán)格模式的瀏覽器行為上也不一樣, 所以不要在未經(jīng)嚴(yán)格模式特...
閱讀 1747·2021-11-23 09:51
閱讀 3371·2021-09-26 10:21
閱讀 875·2021-09-09 09:32
閱讀 967·2019-08-29 16:06
閱讀 3392·2019-08-26 13:36
閱讀 837·2019-08-26 10:56
閱讀 2626·2019-08-26 10:44
閱讀 1205·2019-08-23 14:04