摘要:大括號(hào)的作用,在不同的上下文中差別很大以下觀點(diǎn)若有錯(cuò)誤,請(qǐng)前輩及時(shí)指出一被當(dāng)做對(duì)象字面量如,外層的被賦值給了,這里的被當(dāng)做對(duì)象處理。本文參考你不知道的
大括號(hào)‘{ }’的作用,在不同的上下文中差別很大!以下觀點(diǎn)若有錯(cuò)誤,請(qǐng)前輩及時(shí)指出!
一、{ }被當(dāng)做對(duì)象字面量如:var obj = { foo: function(){} };,外層的{...}被賦值給了obj,這里的{...}被當(dāng)做對(duì)象處理。
在{ }的前面有運(yùn)算符出現(xiàn)時(shí),都會(huì)被當(dāng)做對(duì)象處理,如:"" + {},var a = {x:1};
在{ }的外面包裹( )時(shí),也被當(dāng)對(duì)象處理,如( {a:1} ),而( { var a = 1; } )不符合對(duì)象定義的語(yǔ)法,會(huì)提示語(yǔ)法錯(cuò)誤
二、{ }被當(dāng)做代碼塊除了以上被當(dāng)做對(duì)象處理的情況,其它基本會(huì)被當(dāng)做代碼塊處理
如:
當(dāng)去掉var obj = { foo: function(){...} };中的聲明賦值部分,只留下{ foo: function(){...} };,此時(shí),{...}表示一個(gè)代碼塊,代碼塊內(nèi)的foo: function(){...}將被視為標(biāo)簽語(yǔ)句(可以通過(guò)使用break foo;跳過(guò)被標(biāo)記的代碼塊執(zhí)行之后的語(yǔ)句,而在循環(huán)中可以用continue label;跳過(guò)被標(biāo)記的循環(huán)體的本次循環(huán),繼續(xù)下一次循環(huán),用break label;跳出被標(biāo)記的循環(huán)體)
再如:
[] + {}; //"[object Object]" {} + []; //0
第一句簡(jiǎn)單,{}被當(dāng)做空對(duì)象處理,實(shí)際計(jì)算的是"" + [object Object]
第二句中,{}前面沒(méi)有運(yùn)算符,也沒(méi)有其它任何修飾,被當(dāng)做空的代碼塊了,實(shí)際計(jì)算的是+[]
如:function foo() {...}
如:for(var i = 0; i < 5; i++){...}
var a = {x:1,y:2}; if(a.x == 1){ ... }else if(a.y == 2){ ... }else{ ... }
其實(shí)JavaScript并沒(méi)有else if語(yǔ)句,如果if、else語(yǔ)句后面只有單個(gè)語(yǔ)句時(shí)可以省略{ },所以else if(...){...}else{...},嚴(yán)格來(lái)講應(yīng)該是這樣else { if(...){...}else{...} }
三、解構(gòu)賦值ES6中新增的語(yǔ)法,如:var {a,b} = {a:1,b:2}; 相當(dāng)于:
var obj = {a:1,b:2}; var a = obj.a; var b = obj.b;
解構(gòu)賦值也可以用于函數(shù)命名參數(shù)中:
function foo({a,b}){ console.log(a,b); } foo( {a:1,b:2} )四、JSON對(duì)象
雖說(shuō)JSON是JavaScript語(yǔ)言的一個(gè)子集,但是JSON本身并不是合法的JavaScript語(yǔ)法,如:
{ "a": 1}不符合對(duì)象定義的語(yǔ)法,也不符合標(biāo)簽的語(yǔ)法(不允許有""),在各瀏覽器控制臺(tái)輸入它,表現(xiàn)各不相同,大部分拋出SyntaxError,Chrome則把它轉(zhuǎn)換為對(duì)象了。
此時(shí)可以通過(guò)JSON-P,JSON-P能通過(guò)將JSON數(shù)據(jù)封裝為函數(shù)調(diào)用,如foo({ "a": 1}),從而將JSON轉(zhuǎn)換為合法的JavaScript語(yǔ)法。
本文參考《你不知道的JavaScript》
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80584.html
摘要:如果我們把非布爾值作為條件呢打開(kāi)控制臺(tái)并運(yùn)行上述代碼,會(huì)打印說(shuō)明條件為真值。在中,真值指的是在布爾值上下文中轉(zhuǎn)換后的值為真的值。兩個(gè)能夠建立元素間一一對(duì)應(yīng)的集合稱為互相對(duì)等集合。 showImg(https://segmentfault.com/img/bVbtSvt?w=720&h=360); 為了保證可讀性,本文采用音譯而非直譯。 Javascript 一直是神奇的語(yǔ)言。 不相信我...
摘要:中文文檔中的變量提升,是指在聲明變量的代碼執(zhí)行之前,可以進(jìn)行初始化和使用而不是指在創(chuàng)建詞法環(huán)境階段是否會(huì)創(chuàng)建對(duì)應(yīng)的標(biāo)識(shí)符。 問(wèn)題背景 今天在 chrome devtools 中運(yùn)行以下代碼: function fn (name){ if (typeof name === undefined){ console.log(name:, name) let name ...
摘要:彈出的就是,歲。值得注意的是,和都是改變上下文中的并立即執(zhí)行這個(gè)函數(shù),方法改變了指向之后會(huì)返回一個(gè)函數(shù),可以隨時(shí)調(diào)用。和作用完全一樣,只是傳參的方式不一樣。以上,有錯(cuò)希望各位大神斧正。 apply bind call這三個(gè)方法,作用都是改變當(dāng)前使用該方法的對(duì)象的this指向。但三個(gè)方法還是有一些區(qū)別,先說(shuō)說(shuō)共同點(diǎn)。 window.person = { name: mice...
摘要:運(yùn)行規(guī)則根據(jù)的運(yùn)作原理,我們可以看到,的值和調(diào)用棧通過(guò)哪些函數(shù)的調(diào)用運(yùn)行到調(diào)用當(dāng)前函數(shù)的過(guò)程以及如何被調(diào)用有關(guān)。 1. this的誕生 假設(shè)我們有一個(gè)speak函數(shù),通過(guò)this的運(yùn)行機(jī)制,當(dāng)使用不同的方法調(diào)用它時(shí),我們可以靈活的輸出不同的name。 var me = {name: me}; function speak() { console.log(this.name); }...
摘要:一個(gè)表示編譯器檢測(cè)到一個(gè)無(wú)效的引用值。在實(shí)際情況中,往往是在獲取一個(gè)未被賦值的引用時(shí)被拋出。任何一個(gè)函數(shù)上下文都有一個(gè)被稱為活動(dòng)對(duì)象的變量對(duì)象。沒(méi)有找到的話,就會(huì)認(rèn)為引用名沒(méi)有基礎(chǔ)值并拋出的錯(cuò)誤。下沒(méi)有下的屬性僅存在于被啟動(dòng)的情況下。 和其他語(yǔ)言相比,javascript中的對(duì)于undefined的理解還是有點(diǎn)讓人困惑的。特別是試著理解ReferenceErrors錯(cuò)誤(x is no...
閱讀 2120·2021-11-16 11:45
閱讀 605·2021-11-04 16:12
閱讀 1419·2021-10-08 10:22
閱讀 883·2021-09-23 11:52
閱讀 4182·2021-09-22 15:47
閱讀 3568·2021-09-22 15:07
閱讀 517·2021-09-03 10:28
閱讀 1760·2021-09-02 15:21