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

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

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

      js便簽筆記(10) - 分享:json.js源碼解讀筆記

      1. 如何理解“json”

      首先應(yīng)該意識到,json是一種數(shù)據(jù)轉(zhuǎn)換格式,既然是個“格式”,就是個抽象的東西。它不是js對象,也不是字符串,它只是一種格式,一種規(guī)定而已。

      這個格式規(guī)定了如何將js對象轉(zhuǎn)換成字符串、以及轉(zhuǎn)換成怎樣的字符串——序列化 —— JSON.stringify 接口;

      以及如何將一個有效字符串轉(zhuǎn)換成js對象——反序列化—— JSON.parse 接口;

       

      2. 關(guān)于作者

      json作者是 道格拉斯.克勞福德 ,是一位js大牛,寫過一本《javascript語言精粹》,相信不少朋友都看過。短短200頁書,果然寫出了“精粹”。

       

      3. 瀏覽器支持

      W3C已經(jīng)將json接口定義到標(biāo)準(zhǔn)中,目前主流瀏覽器也都默認(rèn)支持json接口。但是還有不少IE6用戶,可得小心。我曾經(jīng)遇到過這樣的bug。

       

      4. valueOf() 的用法

      var n1 = 10;
      var n2 = new Number(10);
      console.log(typeof n1);  //number
      console.log(typeof n2);  //object
      console.log(typeof n2.valueOf());  //number 

      如上代碼,通過valueOf()方法,可以將一個(Number/String/Boolean)對象,轉(zhuǎn)換成其對應(yīng)的基本類型。

      在json.stringify方法中,如果遇到一個屬性值的類型是object時,首先要排除 new Number/String/Boolean(...) 這三種情況,它就是通過valueOf來操作的。

       

      5. 對特殊字符的處理

      json.js源碼中考慮了一些無意義的unicode字符,并且對他們進行了自定義的處理。相關(guān)的正則表達式如下:

      escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
      cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;

      這兩個正則表達式,分別用在stringify和parse方法中。可以用圖形形象表達這兩個正則的內(nèi)容,如下圖:

      因此,解讀json.js源碼,還必須了解unicode字符集的基礎(chǔ)知識。

       

      6. 在遇到Date類型或者Number類型時,都不要忘記用 isFinite()來驗證有效性。

       

      7. JSON.parse() 對傳入字符串的驗證

      大家用JSON.parse(),而不直接用eval()的原因,就是因為前者是安全轉(zhuǎn)換。那么這里的“安全”是通過什么來保障的呢?

      源碼中通過四步驗證來保證。下面是這四步驗證,以及我寫的注釋:

      // We split the second stage into 4 regexp operations in order to work around   
                  // crippling inefficiencies in IE's and Safari's regexp engines. First we       // 01. 將反斜線格式變?yōu)椤癅”,如把'\\n'變?yōu)?@'
                  // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we // 02. 將簡單值替換為“]”
                  // replace all simple value tokens with ']' characters. Third, we delete all    // 03. 將“: [”、“, [”替換為空字符串
                  // open brackets that follow a colon or comma or that begin the text. Finally,  // 04. 看剩下的字符串是否只是 whitespace or ']' or ',' or ':' or '{' or '}'
                  // we look to see that the remaining characters are only whitespace or ']' or
                  // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.     // 如果是這樣,那么text就可以安全的被執(zhí)行eval()函數(shù)
      
                  if (/^[\],:{}\s]*$/       //只包含 whitespace or ']' or ',' or ':' or '{' or '}'
                          .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')  // 例如:'\\n'->'@','\\u4e00'-> '@',而'\n','\u4e00'則不變
                              .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')   // 將 "abc"、true、false、null、數(shù)字,替換成“]”
                              .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {...}

       

      8. JSON.stringify(value, replacer, space) 第二個參數(shù)可以傳偽數(shù)組

      大家可能知道第二個參數(shù)replacer可以傳入function或者Array,但是它也可以傳如一個偽數(shù)組,模擬傳入Array的情況。偽數(shù)組要這樣寫:

      {
          0 : 'a',
          1 : 'b',
          2 : 'x',
          length : 3  
      }

      不過注意!瀏覽器中自帶的JSON接口,不一定支持,例如chrome中就不識別。所以這里要謹(jǐn)慎使用。安全期間還是用標(biāo)準(zhǔn)的Array好一些。

       

      9. 兩個JS基礎(chǔ)知識

      第一,value 是數(shù)組時,注意 Object.prototype.toString.apply(value) 和 value.toString() 的區(qū)別;

      第二,在 for ... in 循環(huán)中,要判斷 Object.prototype.hasOwnProperty.call(value, k)

      不解釋,看不明白的需要去翻書。

       

      10. 總結(jié)

      以上是我在解讀json2.js源碼過程中做的一點隨意的筆記,列出來跟大家分享。最后貼出我錄制的json.js源碼解讀教程,歡迎去看看!

      --------------------------------------------------------------------------

      json2.js源碼解讀教程

      ---------------------------------------------------------------------------

      posted @ 2014-07-02 22:16  王福朋  閱讀(1348)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 欧美色欧美亚洲高清在线观看| 婷婷六月色| 天天爽天天摸天天碰| 隔壁老王国产在线精品| 国产精品办公室沙发| 色综合视频一区二区三区| 最新亚洲人成网站在线观看 | 中文人妻熟妇乱又伦精品| 日韩av一区二区不卡在线| 国产精品免费观看色悠悠| 熟妇无码熟妇毛片| 377P欧洲日本亚洲大胆| 国产午夜精品久久精品电影 | 久久精品国产99国产精品严洲| japanese无码中文字幕| 97av麻豆蜜桃一区二区| 肃宁县| 91亚洲精品一区二区三区| 无码日韩做暖暖大全免费不卡| 55夜色66夜色国产精品视频| 亚洲欧美日本久久网站 | 亚洲人成人日韩中文字幕| 超碰伊人久久大香线蕉综合| 性人久久久久| 蜜臀av一区二区国产在线| AV无码免费不卡在线观看| 欧美牲交a欧美牲交aⅴ一| 国产精品一区二区插插插| 人妻少妇不满足中文字幕| 人妻中文字幕精品一页| 欧美日韩在线亚洲二区综二| 国产99久久无码精品| 中文有无人妻vs无码人妻激烈| 国产超碰无码最新上传| 亚洲AV成人一区国产精品| 亚洲精品天堂一区二区| 日韩加勒比一本无码精品| 2021国产精品视频网站| 国产av麻豆mag剧集| 亚洲伊人精品久视频国产| 一区二区三区不卡国产|