摘要:整理一下嚴(yán)格模式中不同于一般模式的地方。以上代碼在非嚴(yán)格模式中顯示結(jié)果為,只能訪問(wèn)最后一個(gè)同名參數(shù)。非嚴(yán)格模式嚴(yán)格模式不允許使用中聲明的的變量或方法作用域僅限內(nèi)部,不再會(huì)被創(chuàng)建到其所在的上下文中。在嚴(yán)格模式下始終指向指定的值,包括和。
整理一下JS嚴(yán)格模式中不同于一般模式的地方。
啟用嚴(yán)格模式有兩種方式啟用嚴(yán)格模式
js文件第一行代碼為"use strict";
方法內(nèi)第一行代碼為"use strict";
第一種方式對(duì)整個(gè)js文件中所有代碼啟用嚴(yán)格模式;
第二種方式對(duì)單個(gè)方法中所有代碼啟用嚴(yán)格模式;
每一段內(nèi)嵌js代碼視同單個(gè)js文件。如下面代碼中第一段script內(nèi)嵌js中啟用了嚴(yán)格模式,但不會(huì)影響其他script內(nèi)嵌js:
注:之前看阮一峰老師的一篇關(guān)于嚴(yán)格模式的文章里說(shuō)“只要前面不是產(chǎn)生實(shí)際運(yùn)行結(jié)果的語(yǔ)句,use strict;可以不在第一行,比如直接跟在一個(gè)空的分號(hào)后面。”然而在chrome和node v4.5.0版本中測(cè)試結(jié)果use strict之前有任何代碼(包括一個(gè)空的分號(hào)),都不會(huì)啟用嚴(yán)格模式,也就是說(shuō)use strict必須放在最起始位置。可能是寫(xiě)這篇文章的時(shí)候js引擎和現(xiàn)在有差別的原因吧。
語(yǔ)法限制 變量不允許意外創(chuàng)建全局變量。聲明一個(gè)新變量時(shí),變量名前必須有var/let/const。
不允許對(duì)變量執(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 "#"
不允許對(duì)不可配置的屬性執(zhí)行delete操作。
var fn = {}; Object.defineProperty(fn, "c", {configurable : false}); delete fn.c; //TypeError: Cannot delete property "c" of #
不允許為不可擴(kuò)展對(duì)象添加屬性或方法。
"use strict"; var fn ={a:1}; Object.preventExtensions(fn); fn.b =2; //TypeError: Can"t add property b, object is not extensible
不允許為密封對(duì)象添加屬性或方法,且不允許對(duì)密封對(duì)象的屬性執(zhí)行delete操作。
"use strict"; var fn ={a:1}; Object.seal(fn); delete fn.a; //TypeError: Cannot delete property "a" of #
不允許為凍結(jié)對(duì)象添加屬性或方法,且不允許對(duì)凍結(jié)對(duì)象的屬性執(zhí)行delete操作,且不允許修改凍結(jié)對(duì)象的屬性。
"use strict"; var fn ={a:1}; Object.freeze(fn); fn.a = 2; //TypeError: Cannot assign to read only property "a" of object "#"function
方法不允許有多個(gè)命名相同的形參。
"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,只能訪問(wèn)最后一個(gè)同名參數(shù)。*/
形參與arguments完全獨(dú)立。
"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)部,不再會(huì)被創(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會(huì)默認(rèn)指向全局變量;但是在嚴(yán)格模式中,this指向null,因此調(diào)用this.color時(shí)會(huì)報(bào)錯(cuò)。
其他不允許使用with語(yǔ)句。
不允許使用八進(jìn)制字面量。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/80114.html
摘要:什么是嚴(yán)格模式嚴(yán)格模式是中引入的一種將更好的錯(cuò)誤檢查引入代碼中的方法現(xiàn)在已經(jīng)被大多瀏覽器實(shí)現(xiàn)顧名思義,這種模式使得在更嚴(yán)格的條件下運(yùn)行因此在嚴(yán)格模式下我們的一些不嚴(yán)謹(jǐn)?shù)膶?xiě)法將會(huì)導(dǎo)致程序拋出錯(cuò)誤例如在嚴(yán)格模式下該行將會(huì)拋出錯(cuò)誤在上面的代碼中由 什么是嚴(yán)格模式? 嚴(yán)格模式 是 ECMAScript 5 中引入的一種將更好的錯(cuò)誤檢查引入代碼中的方法, 現(xiàn)在已經(jīng)被大多瀏覽器實(shí)現(xiàn). 顧名思義,這...
摘要:概述的嚴(yán)格模式是中的一種限制性更強(qiáng)的變種方式。嚴(yán)格模式在語(yǔ)義上與正常的有一些不同。首先,嚴(yán)格模式會(huì)將陷阱直接變成明顯的錯(cuò)誤。嚴(yán)格模式禁止刪除聲明變量。 概述 ECMAScript 5的嚴(yán)格模式是JavaScript中的一種限制性更強(qiáng)的變種方式。嚴(yán)格模式不是一個(gè)子集:它在語(yǔ)義上與正常代碼有著明顯的差異。不支持嚴(yán)格模式的瀏覽器與支持嚴(yán)格模式的瀏覽器行為上也不一樣, 所以不要在未經(jīng)嚴(yán)格模式特...
摘要:也可以只在函數(shù)中打開(kāi)嚴(yán)格模式嚴(yán)格模式下沒(méi)有全局變量嚴(yán)格模式下會(huì)報(bào)錯(cuò),非嚴(yán)格模式下正常刪除變量有三種聲明的情形聲明的全局變量聲明的局部變量中聲明的全局變量第一種和第二種情況是無(wú)法用刪掉的。 所謂嚴(yán)格模式其實(shí)就是一個(gè)不會(huì)賦值給任何變量的字符串 use strict如果在全局作用域下 給出這個(gè)提示,那整個(gè)腳本將采用嚴(yán)格模式。也可以只在函數(shù)中打開(kāi)嚴(yán)格模式 1.嚴(yán)格模式下沒(méi)有全局變量 a=tes...
摘要:整個(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開(kāi)始) 一、什么是嚴(yán)格模式 顧名思義,JavaScript 嚴(yán)格模式就是讓 JS 代碼以...
摘要:嚴(yán)格模式創(chuàng)設(shè)了第三種作用域作用域。正常模式下,指向全局對(duì)象,如果綁定的值是非對(duì)象,將被自動(dòng)轉(zhuǎn)為對(duì)象再綁定上去,而和這兩個(gè)無(wú)法轉(zhuǎn)成對(duì)象的值,將被忽略嚴(yán)格模式 概述 嚴(yán)格模式是ES5進(jìn)入標(biāo)準(zhǔn)的目的是為了: 明確禁止一些不合理 不嚴(yán)謹(jǐn)?shù)恼Z(yǔ)法 減少JS語(yǔ)言的一些怪異行為 增加更多報(bào)錯(cuò)的場(chǎng)合 保證代碼運(yùn)行的安全 提高編譯效率 增加運(yùn)行速度 為新版的JS語(yǔ)法做鋪墊 如何開(kāi)啟 使用一段字符串...
閱讀 1771·2023-04-26 00:20
閱讀 1819·2021-11-08 13:21
閱讀 2010·2021-09-10 10:51
閱讀 1577·2021-09-10 10:50
閱讀 3310·2019-08-30 15:54
閱讀 2142·2019-08-30 14:22
閱讀 1438·2019-08-29 16:10
閱讀 3098·2019-08-26 11:50