国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

javascript的 {} 語句塊詳解

2019-11-20 10:29:42
字體:
來源:轉載
供稿:網友

今日學習解析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  })  //正確的寫法

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 明溪县| 丹寨县| 翁牛特旗| 唐山市| 施秉县| 馆陶县| 古田县| 乾安县| 高邮市| 元氏县| 桐庐县| 七台河市| 古丈县| 临西县| 陈巴尔虎旗| 关岭| 芜湖市| 西华县| 仲巴县| 商水县| 康马县| 南江县| 崇左市| 花垣县| 麻江县| 双城市| 枝江市| 南岸区| 普陀区| 木里| 城市| 隆安县| 雷波县| 兰考县| 海城市| 朝阳市| 普宁市| 合江县| 大同市| 洛宁县| 佛学|