<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      深入理解JavaScript系列(9):根本沒有“JSON對象”這回事!

      2012-01-11 09:08  湯姆大叔  閱讀(44565)  評論(21)    收藏  舉報

      前言

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

      正文

      本文的主題是基于ECMAScript262-3來寫的,2011年的262-5新規范增加了JSON對象,和我們平時所說的JSON有關系,但是不是同一個東西,文章最后一節會講到新增加的JSON對象。

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

      我想給大家澄清一下一個非常普遍的誤解,我認為很多JavaScript開發人員都錯誤地把JavaScript對象字面量(Object Literals)稱為JSON對象(JSON Objects),因為他的語法和JSON規范里描述的一樣,但是該規范里也明確地說了JSON只是一個數據交換語言,只有我們將之用在string上下文的時候它才叫JSON。

      序列化與反序列化

      2個程序(或服務器、語言等)需要交互通信的時候,他們傾向于使用string字符串因為string在很多語言里解析的方式都差不多。復雜的數據結構經常需要用到,并且通過各種各樣的中括號{},小括號(),叫括號<>和空格來組成,這個字符串僅僅是按照要求規范好的字符。

      為此,我們為了描述這些復雜的數據結構作為一個string字符串,制定了標準的規則和語法。JSON只是其中一種語法,它可以在string上下文里描述對象,數組,字符串,數字,布爾型和null,然后通過程序間傳輸,并且反序列化成所需要的格式。YAMLXML(甚至request params)也是流行的數據交換格式,但是,我們喜歡JSON,誰叫我們是JavaScript開發人員呢!

      字面量

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

      1. 他們是固定的值,不是變量,讓你從“字面上”理解腳本。 (Literals)
      2. 字符串字面量是由雙引號(")或單引號(')包圍起來的零個或多個字符組成的。(Strings Literals)
      3. 對象字面量是由大括號({})括起來的零個或多個對象的屬性名-值對。(Object Literals)

      何時是JSON,何時不是JSON?

      JSON是設計成描述數據交換格式的,他也有自己的語法,這個語法是JavaScript的一個子集。
      { "prop": "val" } 這樣的聲明有可能是JavaScript對象字面量也有可能是JSON字符串,取決于什么上下文使用它,如果是用在string上下文(用單引號或雙引號引住,或者從text文件讀取)的話,那它就是JSON字符串,如果是用在對象字面量上下文中,那它就是對象字面量。

      // 這是JSON字符串
      var foo = '{ "prop": "val" }';

      // 這是對象字面量
      var bar = { "prop": "val" };

      而且要注意,JSON有非常嚴格的語法,在string上下文里{ "prop": "val" } 是個合法的JSON,但{ prop: "val" }{ 'prop': 'val' }確實不合法的。所有屬性名稱和它的值都必須用雙引號引住,不能使用單引號。另外,即便你用了轉義以后的單引號也是不合法的,詳細的語法規則可以到這里查看

      放到上下文里來看

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

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

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

      真正的JSON對象

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

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

      // 這是JSON字符串,比如從AJAX獲取字符串信息
      var my_json_string = '{ "prop": "val" }';

      // 將字符串反序列化成對象
      var my_obj = JSON.parse( my_json_string );

      alert( my_obj.prop == 'val' ); // 提示 true, 和想象的一樣!

      // 將對象序列化成JSON字符串
      var my_other_json_string = JSON.stringify( my_obj );

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

      更多資料

      如果你想了解更多關于JSON的資料,下面的連接對你絕對有用:

      同步與推薦

      本文已同步至目錄索引:深入理解JavaScript系列

      深入理解JavaScript系列文章,包括了原創,翻譯,轉載等各類型的文章,如果對你有用,請推薦支持一把,給大叔寫作的動力。

      主站蜘蛛池模板: 熟女精品国产一区二区三区| 少妇被粗大猛进进出出| 2020国产欧洲精品网站| 免费人成网站免费看视频| 久色伊人激情文学你懂的| 国产爆乳乱码女大生Av| 99国产欧美另类久久久精品| 亚洲中文字幕一区二区| 久久亚洲精品日本波多野结衣 | 国产亚洲精品VA片在线播放| 国产亚洲精品福利在线无卡一| 国产精品福利自产拍久久| 99久久精品久久久久久婷婷| 成人国产精品中文字幕| 中文字幕日韩国产精品| 亚洲国产精品日韩专区av| 久久精品高清一区二区三区 | 风流老熟女一区二区三区| 黑人异族巨大巨大巨粗| 精品国产欧美一区二区三区在线| 亚洲日韩欧洲乱码av夜夜摸 | 国精偷拍一区二区三区| 大荔县| 产综合无码一区| 亚洲中文字幕无码一区日日添| 无码人妻斩一区二区三区| 99RE6在线观看国产精品| 国内自拍av在线免费| 亚洲人成小说网站色在线| 延寿县| 国产精品视频免费一区二区三区| 美女一区二区三区在线观看视频| 久久99精品国产麻豆宅宅| 国产av不卡一区二区| 香港日本三级亚洲三级| 日本国产精品第一页久久| 久久婷婷综合色一区二区| 内射极品少妇xxxxxhd| 亚洲av无码之国产精品网址蜜芽| 人妻无码久久久久久久久久久| 色色97|