成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

讀書筆記(01) - JSON - JavaScript高級程序設(shè)計

mengbo / 1771人閱讀

摘要:用于把對象序列化字符串,在序列化對象時,所有函數(shù)及原型成員都會被有意忽略,不體現(xiàn)在結(jié)果中。對第步返回的每個值進(jìn)行相應(yīng)的序列化。參考文檔高級程序設(shè)計作者以樂之名本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。

JSON與JavaScript對象

JSON是一種表示結(jié)構(gòu)化數(shù)據(jù)的存儲格式,語法格式上與JavasScript對象有些類似。

TIPS: 與JavaScript對象的格式區(qū)別

不支持變量、函數(shù)或?qū)ο髮嵗?/p>

字符串,屬性名必須使用雙引號

無需定義變量存儲引用

// JSON對象
{
    "name": "KenTsang",
    "age": 27,
    "job": "Developer"
}

// js對象(該對象將作在后續(xù)例子引用)
let person = {
    name: "KenTsang",
    age: 27,
    job: "Developer"
}

ES5定義了一個全局對象JSON,IE8+以上支持,該對象提供來stringifyparse兩個方法用于JSON數(shù)據(jù)解析和序列化。

stringify()

stringify用于把JavaScript對象序列化JSON字符串,

在序列化JavaScript對象時,所有函數(shù)及原型成員都會被有意忽略,不體現(xiàn)在結(jié)果中。此外,值為undefined的任何屬性也都會被跳過。
JSON.stringify(
    value: Object, 
    replace: Array | function(key,value) {},
    space: number | string
)

該方法接受三個參數(shù)

參數(shù):接收傳入的js對象

參數(shù):過濾器(數(shù)組/函數(shù))

參數(shù):字符串縮進(jìn)(數(shù)值/字符串)

參數(shù)2 - 過濾器

TIPS1: 過濾器是一個數(shù)組時,序列化結(jié)果只包含數(shù)組中列出的屬性

let result = JSON.stringify(person, ["name", "job"]);

// 輸出結(jié)果
// {"name":"KenTsang","job":"Developer"}

TIPS2: 過濾器是一個函數(shù)時(替換函數(shù))

var jsonStr = JSON.stringify(Person, function(key, value){
    if (key == "age") {
        return "secret";
    } else {
        return value;
    }
})

// 輸出結(jié)果
// {"name":"KenTsang","age":"secret","job":"Developer"}

如果替換函數(shù)返回的是undefined,則該屬性不會被包含在序列化結(jié)果中。

參數(shù)3 - 字符串縮進(jìn)

用于控制序列化結(jié)果中的縮進(jìn)和空白符,輸出序列結(jié)果帶縮進(jìn)格式,方便預(yù)覽查看。實際應(yīng)用開發(fā)不多。

為數(shù)值時,表示每個級別縮進(jìn)的空格數(shù)(最大10)

為字符串時,則作為縮進(jìn)字符(替換默認(rèn)的空格,最大10個字符)

let result = JSON.stringify(person, null, "--");

// 輸出結(jié)果
/*
{
--"name": "KenTsang",
--"age": 27,
--"job": "Developer"
}
*/
toJSON()方法

應(yīng)對更復(fù)雜的一些需求,我們可以通過toJSON()對某些對象進(jìn)行自定義序列化的需求。

let person = {
    name: "KenTsang",
    age: 27,
    job: "Developer",
    toJSON: function() {
        return {
            "name": "KT",
            "age": "2*",
            "job": "DP"
        }
    }
};

let result = JSON.stringify(person);

// 輸出結(jié)果
// {"name":"KT","age":"2*","job":"DP"}

TIPS: 序列化順序


如果存著toJSON方法而且能通過它取得有效的值,則調(diào)用該方法。否則,返回對象本身。

如果提供了第二個參數(shù),應(yīng)用這個函數(shù)過濾器。傳入函數(shù)過濾器的值是第(1)步的值。

對第(2)步返回的每個值進(jìn)行相應(yīng)的序列化。

如果提供了第三個參數(shù),執(zhí)行相應(yīng)的格式化。

-- 摘自《JavaScript高級程序設(shè)計》--

parse()

parse用于把JSON字符串解析成JavaScript對象

JSON.parse(text: string, reviver: function(key, value) {})

該方法接受三個參數(shù)

參數(shù):接收傳入的json字符串

參數(shù):還原函數(shù)

還原函數(shù)

返回undefined, 結(jié)果中刪除相應(yīng)的鍵

返回其它值,則將值插入到結(jié)果中

let Person = {
    name: "KenTsang",
    age: 27,
    job: "Developer",
    birth: new Date(1991, 3, 19)
};

var jsonStr = JSON.stringify(Person);
var jsObj = JSON.parse(jsonStr, function(key, value) {
    if (key == "birth") {
        return new Date(value);
    } else {
        return value);
    }
});

jsObj.birth.getFullYearh(); 

// 輸出結(jié)果: 1991

例子中通過還原函數(shù),重新實例一個Date對象,所以可以用到getFullYear()方法。

參考文檔

《JavaScript高級程序設(shè)計》

作者:以樂之名
本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。轉(zhuǎn)載請指明出處。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99641.html

相關(guān)文章

  • 讀書筆記(02) - 可維護(hù)性 - JavaScript高級程序設(shè)計

    摘要:解耦優(yōu)勢代碼復(fù)用,單元測試。常用比較誤區(qū)可同時判斷,可用來判斷對象屬性是否存在。使用作判斷無法進(jìn)行充分的類型檢查。文件中應(yīng)用常量參考文檔高級程序設(shè)計作者以樂之名本文原創(chuàng),有不當(dāng)?shù)牡胤綒g迎指出。 showImg(https://segmentfault.com/img/bVburXw?w=500&h=400); 編寫可維護(hù)性代碼 可維護(hù)的代碼遵循原則: 可理解性 (方便他人理解) 直觀...

    k00baa 評論0 收藏0
  • 002-讀書筆記-JavaScript高級程序設(shè)計 在HTML中使用JavaScript

    摘要:文件內(nèi)部使用使用到的代碼引入外部文件外部代碼的地址標(biāo)簽的位置一般情況下,標(biāo)簽的位置放在標(biāo)簽中引入代碼頁面結(jié)構(gòu)對于需要引入很多的中間,如果把放在頭部,無疑會導(dǎo)致瀏覽器呈現(xiàn)頁面出現(xiàn)延遲,就是導(dǎo)致頁面出現(xiàn)空白。頁面結(jié)構(gòu)引入代碼 這篇筆記的內(nèi)容對應(yīng)的是《JavaScript高級程序設(shè)計(第三版)》中的第二章。 1.使用方式 在HTML中使用 JavaScript 的方式有兩種,第一種就是直接內(nèi)...

    banana_pi 評論0 收藏0
  • 001-讀書筆記-JavaScript高級程序設(shè)計 JavaScript簡介

    摘要:由于計算機(jī)的國際化,組織的標(biāo)準(zhǔn)牽涉到很多其他國家,因此組織決定改名表明其國際性。規(guī)范由萬維網(wǎng)聯(lián)盟制定。級標(biāo)準(zhǔn)級標(biāo)準(zhǔn)是不存在的,級一般指的是最初支持的。 這篇筆記的內(nèi)容對應(yīng)的是《JavaScript高級程序設(shè)計(第三版)》中的第一章。 1.ECMA 和 ECMA-262 ECMA 是歐洲計算機(jī)制造商協(xié)會的縮寫,全程是 European Computer Manufacturers Ass...

    masturbator 評論0 收藏0
  • 讀書筆記JavaScriptの類型

    摘要:函數(shù)類型檢測是的子類型,其屬性為參數(shù)個數(shù),但是判斷結(jié)果有內(nèi)建函數(shù)原生函數(shù)常見的有,可能被當(dāng)作構(gòu)造函數(shù)來使用,創(chuàng)建出來的是封裝了的基本類型值。構(gòu)造函數(shù)可以不帶關(guān)鍵字。建議使用和來進(jìn)行顯示強(qiáng)制轉(zhuǎn)換。 前言 此篇小結(jié)來源與《你不知道的JavaScript》和《JavaScript高級程序設(shè)計》的結(jié)合??或許是的,龜速總結(jié)中... 七種內(nèi)置類型 null undefined boolean ...

    cjie 評論0 收藏0
  • JavaScript高級程序設(shè)計》(第3版)讀書筆記 第1~2章

    摘要:表示應(yīng)該立即下載腳本,但不應(yīng)妨礙頁面中的其他操作可選。表示通過屬性指定的代碼的字符集。表示腳本可以延遲到文檔完全被解析和顯示之后再執(zhí)行。實際上,服務(wù)器在傳送文件時使用的類型通常是,但在中設(shè)置這個值卻可能導(dǎo)致腳本被忽略。 第1章 JavaScript 簡介 雖然JavaScript和ECMAScript通常被人們用來表達(dá)相同的含義,但JavaScript的含義比ECMA-262要多得多...

    Corwien 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<