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