欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解JavaScript對象序列化

 更新時間:2016年01月19日 11:08:55   作者:clearbug  
這篇文章主要為大家介紹了JavaScript對象序列化的相關(guān)資料,需要的朋友可以參考下

一.什么是對象序列化?

  對象序列化是指將對象的狀態(tài)轉(zhuǎn)換為字符串(來自我這菜鳥的理解,好像有些書上也是這么說的,淺顯易懂?。?;

  序列化(Serialization)是將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲或傳輸?shù)男问降倪^程(來自“百度百科—序列化“,學(xué)術(shù)性強,略顯高端);

二.為什么會有對象序列化?

  世間萬物,都有其存在的原因。為什么會有對象序列化呢?因為程序猿們需要它。既然是對象序列化,那我們就先從一個對象說起:

var obj = {x:1, y:2};

   當(dāng)這句代碼運行時,對象obj的內(nèi)容會存儲在一塊內(nèi)存中,而obj本身存儲的只是這塊內(nèi)存的地址的映射而已。簡單的說,對象obj就是我們的程序在電腦通電時在內(nèi)存中維護的一種東西,如果我們程序停止了或者電腦斷電了,對象obj將不復(fù)存在。那么如何把對象obj的內(nèi)容保存在磁盤上呢(也就是說在沒電時繼續(xù)保留著)?這時就需要把對象obj序列化,也就是說把obj的內(nèi)容轉(zhuǎn)換成一個字符串的形式,然后再保存在磁盤上。另外,我們又怎么通過HTTP協(xié)議把對象obj的內(nèi)容發(fā)送到客戶端呢?沒錯,還是需要先把對象obj序列化,然后客戶端根據(jù)接收到的字符串再反序列化(也就是將字符串還原為對象)解析出相應(yīng)的對象。這也正是”百度百科—序列化“中描述的兩個作用——存儲、傳輸。

三.JavaScript中的對象序列化

  JSON的全稱是”JavaScript Object Notation“——JavaScript對象表示法。ECMAScript 5中提供了內(nèi)置函數(shù)JSON.stringify()和JSON.parse()用來序列化和還原JavaScript對象。它們使用起來也很簡單:

可以看到,exampleStr和exampleObj2中并沒有 y:undefined 的內(nèi)容。這說明:JSON的語法是JavaScript語法的子集,它并不能表示JavaScript中的所有值,對于JSON語法不支持的屬性,序列化后會將其省略。其詳細規(guī)則如下:

  • ①對于JavaScript中的五種原始類型,JSON語法支持?jǐn)?shù)字、字符串、布爾值、null四種,不支持undefined;
  • ②NaN、Infinity和-Infinity序列化的結(jié)果是null;
  • ③JSON語法不支持函數(shù);
  • ④除了RegExp、Error對象,JSON語法支持其他所有對象;
  • ⑤日期對象序列化的結(jié)果是ISO格式的字符串,但JSON.parse()依然保留它們字符串形態(tài),并不會將其還原為日期對象;
  • ⑥JSON.stringify()只能序列化對象的可枚舉的自有屬性;

從上面的例子也可以看到,在符合以上規(guī)則的情況下,還可以通過對象序列化和反序列化完成對象的深拷貝。

以上就是JSON.stringify()和JSON.parse()的常用用法了,但這兩個方法并不止這么簡單:

四.完整版JSON.stringify()

1.簡介

  序列化原始值、對象或數(shù)組

2.概要

  JSON.stringify(o[, filter][, indent])

3.參數(shù)

  o,要轉(zhuǎn)換成JSON字符串的原始值、對象或數(shù)組

  filter,可選參數(shù),一個數(shù)組或函數(shù)

  indent,可選參數(shù),一個數(shù)值或一個字符串

4.返回

  JSON格式的字符串,代表o的值,同時通過了filter的過濾,以及根據(jù)indent進行了格式化

5.描述

 ?、佼?dāng)對象o自身帶有toJSON()方法時,JSON.stringify()會調(diào)用o的toJSON()方法,并使用該方法的返回值而不是該對象本身進行字符串化;

 ?、谌绻鹒ilter存在且是一個函數(shù),那么該函數(shù)的返回值將會作為JSON.stringify()方法的返回值。并且該函數(shù)接收兩個參數(shù),第一個參數(shù)是一個空字符串,第二個參數(shù)就是對象o。

 ?、廴绻鹒ilter存在且是一個字符串?dāng)?shù)組(如果數(shù)組中包含數(shù)字,數(shù)字會自動轉(zhuǎn)化為字符串),那么對象o的某些屬性名如果不在這個數(shù)組中,則序列化時會將這些屬性省略,且返回的字符串中屬性的順序會與該數(shù)組中屬性的順序一致;

 ?、躂SON.stringify()返回的通常是不帶任何空格或換行符的字符串。如果想輸出可讀性更好的字符串,需要指定第三個參數(shù)。如果指定的第三個參數(shù)是介于1~10之間的值,則JSON.stringify()會在每一“層級”的輸出插入換行符和指定個數(shù)的空格。如果指定的第三個參數(shù)是非空字符串,則JSON.stringify()會插入換行符和該字符串(只取前十個字符)來縮進層級;

五.完整版JSON.parse()

1.簡介

  解析JSON格式的字符串

2.概要

  JSON.parse(s[, reviver])

3.參數(shù)

  s,要解析的字符串

  reviver,可選參數(shù),用來轉(zhuǎn)換解析值的可選函數(shù)

4.返回

  一個對象、數(shù)組或原始值。該返回值是從s中解析的(還有可能被reviver修改過);

5.描述

  ①如果指定了reviver函數(shù),該函數(shù)會為從s中解析的每一個原始值(不是包含這些原始值的對象或數(shù)組)調(diào)用一次。調(diào)用reviver時帶有兩個參數(shù),第一個參數(shù)是屬性名——對象的屬性名或轉(zhuǎn)換成字符串的數(shù)組序號,第二個參數(shù)是對象屬性或數(shù)組元素的原始值。并且,reviver函數(shù)的返回值將作為JSON.parse()的返回值;

以上就是關(guān)于JavaScript對象序列化的相關(guān)內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • web前端頁面生成exe可執(zhí)行文件的方法

    web前端頁面生成exe可執(zhí)行文件的方法

    這篇文章給大家介紹了Electron 怎么將網(wǎng)頁打包成桌面應(yīng)用(web前端頁面怎么生成exe可執(zhí)行文件),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-02-02
  • JavaScript對象訪問器Getter及Setter原理解析

    JavaScript對象訪問器Getter及Setter原理解析

    這篇文章主要介紹了JavaScript對象訪問器Getter及Setter原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • laydate時間日歷插件使用方法詳解

    laydate時間日歷插件使用方法詳解

    這篇文章主要為大家詳細介紹了laydate時間日歷插件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • JavaScript中的16進制字符(改進)

    JavaScript中的16進制字符(改進)

    后來經(jīng)過自己的測試,發(fā)現(xiàn)將字符轉(zhuǎn)換為十六進制的方法不完善。
    2011-11-11
  • js如何實現(xiàn)input的賦值

    js如何實現(xiàn)input的賦值

    這篇文章主要介紹了js如何實現(xiàn)input的賦值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • JS實現(xiàn)靜止元素自動移動示例

    JS實現(xiàn)靜止元素自動移動示例

    這篇文章主要介紹了JS實現(xiàn)靜止元素自動移動的具體實現(xiàn),需要的朋友可以參考下
    2014-04-04
  • 微信提示 在瀏覽器打開 效果實現(xiàn)過程解析

    微信提示 在瀏覽器打開 效果實現(xiàn)過程解析

    這篇文章主要介紹了微信提示 在瀏覽器打開 效果實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 如何實現(xiàn)JavaScript動態(tài)加載CSS和JS文件

    如何實現(xiàn)JavaScript動態(tài)加載CSS和JS文件

    這篇文章主要為大家詳細介紹了JavaScript動態(tài)加載CSS和JS文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-10-10
  • ES6中Math對象新增的方法實例詳解

    ES6中Math對象新增的方法實例詳解

    這篇文章主要介紹了ES6中Math對象新增的方法,結(jié)合實例形式詳細分析了ES6中Math對象的各種常用數(shù)學(xué)函數(shù)與新增方法相關(guān)使用技巧,需要的朋友可以參考下
    2017-04-04
  • js簡單的分頁器插件代碼實例

    js簡單的分頁器插件代碼實例

    這篇文章主要介紹了js簡單的分頁器插件代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09

最新評論