摘要:整理一下嚴格模式中不同于一般模式的地方。以上代碼在非嚴格模式中顯示結果為,只能訪問最后一個同名參數(shù)。非嚴格模式嚴格模式不允許使用中聲明的的變量或方法作用域僅限內部,不再會被創(chuàng)建到其所在的上下文中。在嚴格模式下始終指向指定的值,包括和。
整理一下JS嚴格模式中不同于一般模式的地方。
啟用嚴格模式有兩種方式啟用嚴格模式
js文件第一行代碼為"use strict";
方法內第一行代碼為"use strict";
第一種方式對整個js文件中所有代碼啟用嚴格模式;
第二種方式對單個方法中所有代碼啟用嚴格模式;
每一段內嵌js代碼視同單個js文件。如下面代碼中第一段script內嵌js中啟用了嚴格模式,但不會影響其他script內嵌js:
注:之前看阮一峰老師的一篇關于嚴格模式的文章里說“只要前面不是產(chǎn)生實際運行結果的語句,use strict;可以不在第一行,比如直接跟在一個空的分號后面?!比欢赾hrome和node v4.5.0版本中測試結果use strict之前有任何代碼(包括一個空的分號),都不會啟用嚴格模式,也就是說use strict必須放在最起始位置??赡苁菍戇@篇文章的時候js引擎和現(xiàn)在有差別的原因吧。
語法限制 變量不允許意外創(chuàng)建全局變量。聲明一個新變量時,變量名前必須有var/let/const。
不允許對變量執(zhí)行delete操作。
object
不允許修改只讀屬性。
"use strict"; var fn = {}; Object.defineProperty(fn, "c", {writable : false}); fn.c = 2; //TypeError: Cannot assign to read only property "c" of object "#"
不允許對不可配置的屬性執(zhí)行delete操作。
var fn = {}; Object.defineProperty(fn, "c", {configurable : false}); delete fn.c; //TypeError: Cannot delete property "c" of #
不允許為不可擴展對象添加屬性或方法。
"use strict"; var fn ={a:1}; Object.preventExtensions(fn); fn.b =2; //TypeError: Can"t add property b, object is not extensible
不允許為密封對象添加屬性或方法,且不允許對密封對象的屬性執(zhí)行delete操作。
"use strict"; var fn ={a:1}; Object.seal(fn); delete fn.a; //TypeError: Cannot delete property "a" of #
不允許為凍結對象添加屬性或方法,且不允許對凍結對象的屬性執(zhí)行delete操作,且不允許修改凍結對象的屬性。
"use strict"; var fn ={a:1}; Object.freeze(fn); fn.a = 2; //TypeError: Cannot assign to read only property "a" of object "#"function
方法不允許有多個命名相同的形參。
"use strict"; function fn(a, a){console.log(a);} fn(2,3); //SyntaxError: Duplicate parameter name not allowed in this context /*以上代碼在非嚴格模式中顯示結果為3,只能訪問最后一個同名參數(shù)。*/
形參與arguments完全獨立。
"use strict"; function showValue(value){ value = "Foo"; console.log(value); //"Foo" console.log(arguments[0]); //非嚴格模式:"Foo";嚴格模式:"Hi" }showValue("Hi");
不允許使用arguments.callee
"use strict"; (function showValue(value){ console.log(arguments.callee); })();//TypeError: "caller", "callee", and "arguments" properties may not be accessed on strict mode functions or the arguments objects for calls to themeval
eval中聲明的的變量或方法作用域僅限eval內部,不再會被創(chuàng)建到其所在的上下文中。
"use strict"; (function doSomething(){ var y = eval("var x=10;x*2"); console.log(y); //20 console.log(x); //ReferenceError: x is not defined })();this
this在嚴格模式下始終指向指定的值,包括null和undefined。
window.color="red"; //node環(huán)境中為global.color = "red"; function displayColor(){ console.log(this.color); } displayColor.call(null);
以上代碼在非嚴格模式中,this會默認指向全局變量;但是在嚴格模式中,this指向null,因此調用this.color時會報錯。
其他不允許使用with語句。
不允許使用八進制字面量。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/80114.html
摘要:什么是嚴格模式嚴格模式是中引入的一種將更好的錯誤檢查引入代碼中的方法現(xiàn)在已經(jīng)被大多瀏覽器實現(xiàn)顧名思義,這種模式使得在更嚴格的條件下運行因此在嚴格模式下我們的一些不嚴謹?shù)膶懛▽е鲁绦驋伋鲥e誤例如在嚴格模式下該行將會拋出錯誤在上面的代碼中由 什么是嚴格模式? 嚴格模式 是 ECMAScript 5 中引入的一種將更好的錯誤檢查引入代碼中的方法, 現(xiàn)在已經(jīng)被大多瀏覽器實現(xiàn). 顧名思義,這...
摘要:概述的嚴格模式是中的一種限制性更強的變種方式。嚴格模式在語義上與正常的有一些不同。首先,嚴格模式會將陷阱直接變成明顯的錯誤。嚴格模式禁止刪除聲明變量。 概述 ECMAScript 5的嚴格模式是JavaScript中的一種限制性更強的變種方式。嚴格模式不是一個子集:它在語義上與正常代碼有著明顯的差異。不支持嚴格模式的瀏覽器與支持嚴格模式的瀏覽器行為上也不一樣, 所以不要在未經(jīng)嚴格模式特...
摘要:也可以只在函數(shù)中打開嚴格模式嚴格模式下沒有全局變量嚴格模式下會報錯,非嚴格模式下正常刪除變量有三種聲明的情形聲明的全局變量聲明的局部變量中聲明的全局變量第一種和第二種情況是無法用刪掉的。 所謂嚴格模式其實就是一個不會賦值給任何變量的字符串 use strict如果在全局作用域下 給出這個提示,那整個腳本將采用嚴格模式。也可以只在函數(shù)中打開嚴格模式 1.嚴格模式下沒有全局變量 a=tes...
閱讀 1801·2023-04-26 00:20
閱讀 1851·2021-11-08 13:21
閱讀 2049·2021-09-10 10:51
閱讀 1606·2021-09-10 10:50
閱讀 3334·2019-08-30 15:54
閱讀 2161·2019-08-30 14:22
閱讀 1457·2019-08-29 16:10
閱讀 3119·2019-08-26 11:50