欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript的 {} 語句塊詳解

 更新時(shí)間:2016年02月27日 11:53:37   投稿:hebedich  
這篇文章主要介紹了javascript的 {} 語句塊詳解的相關(guān)資料,需要的朋友可以參考下

今日學(xué)習(xí)解析json字符串,用到了一個(gè)eval()方法,解析字符串的時(shí)候?yàn)槭裁葱枰由侠ㄌ柲??摸不著頭腦。原來javascript中{}語句塊具有二義性,不加括號會出錯(cuò),理解這種二義性對我們理解javascript代碼有極大幫助。

一、{}語句塊的兩個(gè)含義

表示語句塊

a. 在javascript中可以使用{}來括起代碼,在編輯器中方便管理代碼。因?yàn)閖avascript并沒有塊級作用域,所以這種寫法是無害的。

{
//some code...
}


b. 在javascript中 ,條件判斷語句,循環(huán)語句,函數(shù)都需要{}語句塊來整合代碼

對象字面量

var box = {
  name:'kuoaho',
  age:21 
}

//此時(shí)[code]作為表達(dá)式,可以賦值給一個(gè)變量
//其實(shí)對象字面量就是可以生成對象值的表達(dá)式

二、那如果對象字面量不作為一個(gè)賦值表達(dá)式,會發(fā)生什么情況呢?

example:

  {name:'kuoao'}    //沒有報(bào)錯(cuò),但是也沒有創(chuàng)建對象
  {name:'kuohao',age}  //報(bào)錯(cuò)

由上面可以看出對象字面量只能夠作為表達(dá)式賦值,第一種寫法沒有錯(cuò),只是javascript將它作為一個(gè)label語句解析了。

analysis:

  {name:'kuoao'}

    //{}一個(gè)語句塊
   // name:'kuohao',一個(gè)label語句,用于標(biāo)記for循環(huán)

三、但是問題又來了……

{
name:'kuohao',
age:21
}

//這樣為什么會報(bào)錯(cuò)?這不是對象字面量的寫法嗎?
因?yàn)閖avascript中{}的二義性,{}不僅僅被認(rèn)為是對象字面量而且還會被認(rèn)為是代碼塊。

analysis:
  {
  name:'kuohao',
  age:21
  }

一個(gè)代碼塊,兩條label語句,如果沒有逗號,是完全沒有問題的,所以關(guān)鍵在于逗號,兩條語句的分隔應(yīng)該使用分號,所以javascript會判定這是語法錯(cuò)誤

四、正確的寫法

({
  name:'kuohao',
  age:21
  })

  //正確的寫法

()會把語句轉(zhuǎn)換成表達(dá)式,稱為語句表達(dá)式,對象字面量不是表達(dá)式嗎?為什么還需要()來轉(zhuǎn)換?

加上括號以后,就可以消除這種二義性,因?yàn)槔ㄌ柪锏拇a都會被轉(zhuǎn)換為表達(dá)式求值并且返回,因此語句塊也就變成了對象字面量,也可以得出,對象字面量必須作為表達(dá)式而存在

相關(guān)文章

  • 深入理解JavaScript中的對象復(fù)制(Object Clone)

    深入理解JavaScript中的對象復(fù)制(Object Clone)

    下面小編就為大家?guī)硪黄钊肜斫釰avaScript中的對象復(fù)制(Object Clone)。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05
  • 最新評論