摘要:整理一下嚴(yán)格模式中不同于一般模式的地方。以上代碼在非嚴(yán)格模式中顯示結(jié)果為,只能訪問最后一個同名參數(shù)。非嚴(yán)格模式嚴(yán)格模式不允許使用中聲明的的變量或方法作用域僅限內(nèi)部,不再會被創(chuàng)建到其所在的上下文中。在嚴(yán)格模式下始終指向指定的值,包括和。
整理一下JS嚴(yán)格模式中不同于一般模式的地方。
啟用嚴(yán)格模式有兩種方式啟用嚴(yán)格模式
js文件第一行代碼為"use strict";
方法內(nèi)第一行代碼為"use strict";
第一種方式對整個js文件中所有代碼啟用嚴(yán)格模式;
第二種方式對單個方法中所有代碼啟用嚴(yán)格模式;
每一段內(nèi)嵌js代碼視同單個js文件。如下面代碼中第一段script內(nèi)嵌js中啟用了嚴(yán)格模式,但不會影響其他script內(nèi)嵌js:
注:之前看阮一峰老師的一篇關(guān)于嚴(yán)格模式的文章里說“只要前面不是產(chǎn)生實際運行結(jié)果的語句,use strict;可以不在第一行,比如直接跟在一個空的分號后面。”然而在chrome和node v4.5.0版本中測試結(jié)果use strict之前有任何代碼(包括一個空的分號),都不會啟用嚴(yán)格模式,也就是說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 #
不允許為凍結(jié)對象添加屬性或方法,且不允許對凍結(jié)對象的屬性執(zhí)行delete操作,且不允許修改凍結(jié)對象的屬性。
"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 /*以上代碼在非嚴(yán)格模式中顯示結(jié)果為3,只能訪問最后一個同名參數(shù)。*/
形參與arguments完全獨立。
"use strict"; function showValue(value){ value = "Foo"; console.log(value); //"Foo" console.log(arguments[0]); //非嚴(yán)格模式:"Foo";嚴(yán)格模式:"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內(nèi)部,不再會被創(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在嚴(yán)格模式下始終指向指定的值,包括null和undefined。
window.color="red"; //node環(huán)境中為global.color = "red"; function displayColor(){ console.log(this.color); } displayColor.call(null);
以上代碼在非嚴(yán)格模式中,this會默認(rèn)指向全局變量;但是在嚴(yán)格模式中,this指向null,因此調(diào)用this.color時會報錯。
其他不允許使用with語句。
不允許使用八進制字面量。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/80114.html
摘要:什么是嚴(yán)格模式嚴(yán)格模式是中引入的一種將更好的錯誤檢查引入代碼中的方法現(xiàn)在已經(jīng)被大多瀏覽器實現(xiàn)顧名思義,這種模式使得在更嚴(yán)格的條件下運行因此在嚴(yán)格模式下我們的一些不嚴(yán)謹(jǐn)?shù)膶懛▽?dǎo)致程序拋出錯誤例如在嚴(yán)格模式下該行將會拋出錯誤在上面的代碼中由 什么是嚴(yán)格模式? 嚴(yán)格模式 是 ECMAScript 5 中引入的一種將更好的錯誤檢查引入代碼中的方法, 現(xiàn)在已經(jīng)被大多瀏覽器實現(xiàn). 顧名思義,這...
摘要:概述的嚴(yán)格模式是中的一種限制性更強的變種方式。嚴(yán)格模式在語義上與正常的有一些不同。首先,嚴(yán)格模式會將陷阱直接變成明顯的錯誤。嚴(yán)格模式禁止刪除聲明變量。 概述 ECMAScript 5的嚴(yán)格模式是JavaScript中的一種限制性更強的變種方式。嚴(yán)格模式不是一個子集:它在語義上與正常代碼有著明顯的差異。不支持嚴(yán)格模式的瀏覽器與支持嚴(yán)格模式的瀏覽器行為上也不一樣, 所以不要在未經(jīng)嚴(yán)格模式特...
摘要:也可以只在函數(shù)中打開嚴(yán)格模式嚴(yán)格模式下沒有全局變量嚴(yán)格模式下會報錯,非嚴(yán)格模式下正常刪除變量有三種聲明的情形聲明的全局變量聲明的局部變量中聲明的全局變量第一種和第二種情況是無法用刪掉的。 所謂嚴(yán)格模式其實就是一個不會賦值給任何變量的字符串 use strict如果在全局作用域下 給出這個提示,那整個腳本將采用嚴(yán)格模式。也可以只在函數(shù)中打開嚴(yán)格模式 1.嚴(yán)格模式下沒有全局變量 a=tes...
摘要:整個腳本文件就會以嚴(yán)格模式執(zhí)行。函數(shù)作用域范圍將放在函數(shù)體的第一行,則整個函數(shù)以嚴(yán)格模式運行。嚴(yán)格模式下,必須指明的指向?qū)ο蟆=乖诜呛瘮?shù)代碼塊聲明函數(shù)的嚴(yán)格模式只允許在全局作用域或函數(shù)作用域聲明函數(shù)。 ECMAScript 5 引入了 strict mode ,現(xiàn)在已經(jīng)被大多瀏覽器實現(xiàn)(從IE10開始) 一、什么是嚴(yán)格模式 顧名思義,JavaScript 嚴(yán)格模式就是讓 JS 代碼以...
閱讀 1760·2023-04-26 00:20
閱讀 1804·2021-11-08 13:21
閱讀 1930·2021-09-10 10:51
閱讀 1557·2021-09-10 10:50
閱讀 3249·2019-08-30 15:54
閱讀 2131·2019-08-30 14:22
閱讀 1429·2019-08-29 16:10
閱讀 3089·2019-08-26 11:50