javascript的 {} 語句塊詳解
今日學(xué)習(xí)解析json字符串,用到了一個eval()方法,解析字符串的時候為什么需要加上括號呢?摸不著頭腦。原來javascript中{}語句塊具有二義性,不加括號會出錯,理解這種二義性對我們理解javascript代碼有極大幫助。
一、{}語句塊的兩個含義
表示語句塊
a. 在javascript中可以使用{}來括起代碼,在編輯器中方便管理代碼。因為javascript并沒有塊級作用域,所以這種寫法是無害的。
{
//some code...
}
b. 在javascript中 ,條件判斷語句,循環(huán)語句,函數(shù)都需要{}語句塊來整合代碼
對象字面量
var box = {
name:'kuoaho',
age:21
}
//此時[code]作為表達(dá)式,可以賦值給一個變量
//其實對象字面量就是可以生成對象值的表達(dá)式
二、那如果對象字面量不作為一個賦值表達(dá)式,會發(fā)生什么情況呢?
example:
{name:'kuoao'} //沒有報錯,但是也沒有創(chuàng)建對象
{name:'kuohao',age} //報錯
由上面可以看出對象字面量只能夠作為表達(dá)式賦值,第一種寫法沒有錯,只是javascript將它作為一個label語句解析了。
analysis:
{name:'kuoao'}
//{}一個語句塊
// name:'kuohao',一個label語句,用于標(biāo)記for循環(huán)
三、但是問題又來了……
{
name:'kuohao',
age:21
}
//這樣為什么會報錯?這不是對象字面量的寫法嗎?
因為javascript中{}的二義性,{}不僅僅被認(rèn)為是對象字面量而且還會被認(rèn)為是代碼塊。
analysis:
{
name:'kuohao',
age:21
}
一個代碼塊,兩條label語句,如果沒有逗號,是完全沒有問題的,所以關(guān)鍵在于逗號,兩條語句的分隔應(yīng)該使用分號,所以javascript會判定這是語法錯誤
四、正確的寫法
({
name:'kuohao',
age:21
})
//正確的寫法
()會把語句轉(zhuǎn)換成表達(dá)式,稱為語句表達(dá)式,對象字面量不是表達(dá)式嗎?為什么還需要()來轉(zhuǎn)換?
加上括號以后,就可以消除這種二義性,因為括號里的代碼都會被轉(zhuǎn)換為表達(dá)式求值并且返回,因此語句塊也就變成了對象字面量,也可以得出,對象字面量必須作為表達(dá)式而存在
相關(guān)文章
JavaScript 學(xué)習(xí)筆記 Black.Caffeine 09.11.28
這兩天終于寫出了一個個人認(rèn)為真正意義上的作業(yè)了,不過,最大感受就是。。。IE太垃圾了。。。so,這個作業(yè)實際上也沒有完成的很完美,因為,在IE上還是有兼容性的問題存在,不錯,就此先自我總結(jié)一下吧~免得以后又忘了~2009-11-11
JavaScript中prototype為對象添加屬性的誤區(qū)介紹
prototype為對象添加屬性的的過程中有些誤區(qū),在本文將為大家詳細(xì)介紹下,感興趣的朋友可不要錯過2013-10-10
De facto standard 世界上不可思議的事實標(biāo)準(zhǔn)
前些天IEBlog中提到實現(xiàn)互通并不是只靠標(biāo)準(zhǔn)就行,其中舉出了一些關(guān)于事實上的標(biāo)準(zhǔn)的考慮——所謂“事實上的標(biāo)準(zhǔn)”,也就是并非標(biāo)準(zhǔn),但大家都遵循著它去做事情的那么一種東西。2010-08-08
JavaScript基礎(chǔ)語法與數(shù)據(jù)類型介紹
這篇文章介紹了JavaScript基礎(chǔ)語法與數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02

