日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
JavaScript:根本沒有“JSON對(duì)象”這回事!

寫這篇文章的目的是經(jīng)??吹介_發(fā)人員說:把字符串轉(zhuǎn)化為JSON對(duì)象,把JSON對(duì)象轉(zhuǎn)化成字符串等類似的話題,所以把之前收藏的一篇老外的文章整理翻譯了一下,供大家討論,如有錯(cuò)誤,請(qǐng)大家指出,多謝。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了赫章免費(fèi)建站歡迎大家使用!

本文的主題是基于ECMAScript262-3來寫的,2011年的262-5新規(guī)范增加了JSON對(duì)象,和我們平時(shí)所說的JSON有關(guān)系,但是不是同一個(gè)東西,文章最后一節(jié)會(huì)講到新增加的JSON對(duì)象。

英文原文:http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/

我想給大家澄清一下一個(gè)非常普遍的誤解,我認(rèn)為很多JavaScript開發(fā)人員都錯(cuò)誤地把JavaScript對(duì)象字面量(Object Literals)稱為JSON對(duì)象(JSON Objects),因?yàn)樗恼Z(yǔ)法和JSON規(guī)范里描述的一樣,但是該規(guī)范里也明確地說了JSON只是一個(gè)數(shù)據(jù)交換語(yǔ)言,只有我們將之用在string上下文的時(shí)候它才叫JSON。

序列化與反序列化

2個(gè)程序(或服務(wù)器、語(yǔ)言等)需要交互通信的時(shí)候,他們傾向于使用string字符串因?yàn)閟tring在很多語(yǔ)言里解析的方式都差不多。復(fù)雜的數(shù)據(jù)結(jié)構(gòu)經(jīng)常需要用到,并且通過各種各樣的中括號(hào){},小括號(hào)(),叫括號(hào)<>和空格來組成,這個(gè)字符串僅僅是按照要求規(guī)范好的字符。

為此,我們?yōu)榱嗣枋鲞@些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)作為一個(gè)string字符串,制定了標(biāo)準(zhǔn)的規(guī)則和語(yǔ)法。JSON只是其中一種語(yǔ)法,它可以在string上下文里描述對(duì)象,數(shù)組,字符串,數(shù)字,布爾型和null,然后通過程序間傳輸,并且反序列化成所需要的格式。YAML和XML(甚至request params)也是流行的數(shù)據(jù)交換格式,但是,我們喜歡JSON,誰叫我們是JavaScript開發(fā)人員呢!

字面量

引用Mozilla Developer Center里的幾句話,供大家參考:

◆ 他們是固定的值,不是變量,讓你從“字面上”理解腳本。 (Literals)

◆ 字符串字面量是由雙引號(hào)(")或單引號(hào)(')包圍起來的零個(gè)或多個(gè)字符組成的。(Strings Literals)

◆ 對(duì)象字面量是由大括號(hào)({})括起來的零個(gè)或多個(gè)對(duì)象的屬性名-值對(duì)。(Object Literals)

何時(shí)是JSON,何時(shí)不是JSON?

JSON是設(shè)計(jì)成描述數(shù)據(jù)交換格式的,他也有自己的語(yǔ)法,這個(gè)語(yǔ)法是JavaScript的一個(gè)子集。

{ "prop": "val" } 這樣的聲明有可能是JavaScript對(duì)象字面量也有可能是JSON字符串,取決于什么上下文使用它,如果是用在string上下文(用單引號(hào)或雙引號(hào)引住,或者從text文件讀取)的話,那它就是JSON字符串,如果是用在對(duì)象字面量上下文中,那它就是對(duì)象字面量。

 
 
 
  1. // 這是JSON字符串  
  2. var foo = '{ "prop": "val" }';  
  3.    
  4. // 這是對(duì)象字面量  
  5. var bar = { "prop": "val" }; 

而且要注意,JSON有非常嚴(yán)格的語(yǔ)法,在string上下文里{ "prop": "val" } 是個(gè)合法的JSON,但{ prop: "val" }和{ 'prop': 'val' }確實(shí)不合法的。所有屬性名稱和它的值都必須用雙引號(hào)引住,不能使用單引號(hào)。另外,即便你用了轉(zhuǎn)義以后的單引號(hào)也是不合法的,詳細(xì)的語(yǔ)法規(guī)則可以到這里查看。

放到上下文里來看

大家伙可能嗤之以鼻:難道JavaScript代碼不是一個(gè)大的字符串?

當(dāng)然是,所有的JavaScript代碼和HTML(可能還有其他東西)都是字符串,直到瀏覽器對(duì)他們進(jìn)行解析。這時(shí)候.jf文件或者inline的JavaScript代碼已經(jīng)不是字符串了,而是被當(dāng)成真正的JavaScript源代碼了,就像頁(yè)面里的innterHTML一樣,這時(shí)候也不是字符串了,而是被解析成DOM結(jié)構(gòu)了。

再次說一下,這取決于上下文,在string上下文里使用帶有大括號(hào)的JavaScript對(duì)象,那它就是JSON字符串,而如果在對(duì)象字面量上下文里使用的話,那它就是對(duì)象字面量。

真正的JSON對(duì)象

開頭已經(jīng)提到,對(duì)象字面量不是JSON對(duì)象,但是有真正的JSON對(duì)象。但是兩者完全不一樣概念,在新版的瀏覽器里JSON對(duì)象已經(jīng)被原生的內(nèi)置對(duì)象了,目前有2個(gè)靜態(tài)方法:JSON.parse用來將JSON字符串反序列化成對(duì)象,JSON.stringify用來將對(duì)象序列化成JSON字符串。老版本的瀏覽器不支持這個(gè)對(duì)象,但你可以通過json2.js來實(shí)現(xiàn)同樣的功能。

如果還不理解,別擔(dān)心,參考一下的例子就知道了:

 
 
 
  1. // 這是JSON字符串,比如從AJAX獲取字符串信息  
  2. var my_json_string = '{ "prop": "val" }';  
  3.    
  4. // 將字符串反序列化成對(duì)象  
  5. var my_obj = JSON.parse( my_json_string );  
  6.    
  7. alert( my_obj.prop == 'val' ); //  提示 true, 和想象的一樣!  
  8.    
  9. // 將對(duì)象序列化成JSON字符串  
  10. var my_other_json_string = JSON.stringify( my_obj ); 

另外,Paul Irish提到Douglas Crockford在JSON RFC里用到了“JSON object”,但是在那個(gè)上下文里,他的意思是“對(duì)象描述成JSON字符串”不是“對(duì)象字面量”。

原文:http://www.cnblogs.com/TomXu/archive/2012/01/11/2311956.html


本文名稱:JavaScript:根本沒有“JSON對(duì)象”這回事!
URL分享:http://www.5511xx.com/article/ccidjjg.html