javascript的 {} 語句塊詳解_基礎知識

來源:互聯網
上載者:User

今日學習解析json字串,用到了一個eval()方法,解析字串的時候為什麼需要加上括弧呢?摸不著頭腦。原來javascript中{}語句塊具有二義性,不加括弧會出錯,理解這種二義性對我們理解javascript代碼有極大協助。

一、{}語句塊的兩個含義

表示語句塊

a. 在javascript中可以使用{}來括起代碼,在編輯器中方便管理代碼。因為javascript並沒有塊級範圍,所以這種寫法是無害的。

{//some code...}


b. 在javascript中 ,條件判斷語句,迴圈語句,函數都需要{}語句塊來整合代碼

對象字面量

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

//此時[code]作為運算式,可以賦值給一個變數
//其實對象字面量就是可以產生對象值的運算式

二、那如果對象字面量不作為一個賦值運算式,會發生什麼情況呢?

example:

  {name:'kuoao'}    //沒有報錯,但是也沒有建立對象  {name:'kuohao',age}  //報錯

由上面可以看出對象字面量只能夠作為運算式賦值,第一種寫法沒有錯,只是javascript將它作為一個label語句解析了。

analysis:

  {name:'kuoao'}    //{}一個語句塊   // name:'kuohao',一個label語句,用於標記for迴圈

三、但是問題又來了……

{name:'kuohao',age:21}

//這樣為什麼會報錯?這不是對象字面量的寫法嗎?
因為javascript中{}的二義性,{}不僅僅被認為是對象字面量而且還會被認為是代碼塊。

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

一個代碼塊,兩條label語句,如果沒有逗號,是完全沒有問題的,所以關鍵在於逗號,兩條語句的分隔應該使用分號,所以javascript會判定這是語法錯誤

四、正確的寫法

({  name:'kuohao',  age:21  })  //正確的寫法

()會把語句轉換成運算式,稱為語句運算式,對象字面量不是運算式嗎?為什麼還需要()來轉換?

加上括弧以後,就可以消除這種二義性,因為括弧裡的代碼都會被轉換為運算式求值並且返回,因此語句塊也就變成了對象字面量,也可以得出,對象字面量必須作為運算式而存在

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.