首頁 >web前端 >js教程 >javascript的 {} 語句區塊詳解_基礎知識

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

WBOY
WBOY原創
2016-05-16 15:13:151440瀏覽

今日學習解析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
  })

  //正确的写法

()會把語句轉換成表達式,稱為語句表達式,物件字面量不是表達式嗎?為什麼還需要()來轉換?

加上括號以後,就可以消除這種二義性,因為括號裡的程式碼都會被轉換為表達式求值並且返回,因此語句區塊也就變成了物件字面量,也可以得出,物件字面量必須作為表達式而存在

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn