宝哥软件园

详细解释JavaScript对象序列化

编辑:宝哥软件园 来源:互联网 时间:2021-09-18

1.什么是对象序列化?

对象序列化是指把一个对象的状态转换成一个字符串(从我这个菜鸟的理解,好像有些书也这么说,很容易理解!);

序列化是将一个对象的状态信息转换成可以存储或传输的形式的过程(来自百度百科-序列化,学术性强,略高端);

2.为什么会有对象序列化?

世间万物都有其存在的理由。为什么会有对象序列化?因为程需要它。因为它是对象序列化,让我们从一个对象开始:

var obj={x:1,y :2 };当这段代码运行时,对象obj的内容将存储在一个内存块中,而obj本身只存储这个内存块的地址映射。简单地说,对象obj是当计算机通电时,我们的程序在内存中维护的东西。如果我们的程序停止或计算机关机,对象obj将不复存在。那么如何把object obj的内容保存在磁盘上(也就是没电的时候保存)?此时需要序列化对象obj,也就是说把obj的内容转换成字符串,然后保存到磁盘上。另外,如何通过HTTP协议将对象obj的内容发送给客户端?是的,仍然需要先序列化对象obj,然后客户端将对接收到的字符串进行反序列化(即将字符串还原为对象)来解析对应的对象。这正是百度百科-序列化中描述的两个功能:——存储和传输。

三.JavaScript中对象的序列化。

JSON的全称是“JavaScript对象表示法”—— JavaScript对象表示法。在ECMAScript 5中,提供了内置函数JSON.stringify()和JSON.parse()来序列化和恢复JavaScript对象。它们也很容易使用:

您可以看到在exampleStr和exampleObj2中没有y :未定义的内容。这表明JSON语法是JavaScript语法的子集,它不能代表JavaScript中的所有值。对于JSON语法不支持的属性,序列化后会省略。细则如下:

对于JavaScript中的五种原始类型,JSON语法支持四种类型:数字、字符串、布尔值和null,但不支持undefined;NaN、Infinity和-Infinity序列化的结果为空;JSON语法不支持函数; JSON语法支持除RegExp和Error对象以外的所有对象;日期对象序列化的结果是ISO格式的字符串,但JSON.parse()仍然保留了它们的字符串形式,不会还原为日期对象;JSON.stringify()只能序列化对象的可枚举自有属性;从上面的例子也可以看出,如果满足上述规则,对象的深度复制也可以通过对象序列化和反序列化来完成。

以上是JSON.stringify()和JSON.parse()的常用用法,但这两种方法并没有那么简单:

JSON.stringify()的完整版本。

1.介绍

序列化原始值、对象或数组。

2.摘要

JSON.stringify(o[,筛选器][,缩进])

3.参数。

o,要转换为JSON字符串的原始值、对象或数组。

筛选器、可选参数、数组或函数。

缩进、可选参数、数值或字符串。

4.返回。

JSON格式的字符串,表示o的值,已经被过滤器过滤,并根据缩进进行格式化。

5.描述。

(1)当对象o本身有一个toJSON()方法时,JSON.stringify()会调用o的toJSON()方法,并使用这个方法的返回值代替对象本身进行串线;

如果filter存在并且是一个函数,那么这个函数的返回值将是JSON.stringify()方法的返回值。该函数接收两个参数,第一个参数是空字符串,第二个参数是对象o。

如果filter存在,并且是字符串数组(如果数组中包含数字,则数字会自动转换为字符串),那么如果object o的一些属性名称不在这个数组中,序列化时会省略这些属性,返回的字符串中属性的顺序会与这个数组中的一致;

JSON.stringify()通常返回没有任何空格或换行符的字符串。如果想要输出可读性更好的字符串,需要指定第三个参数。如果指定的第三个参数是1到10之间的值,JSON.stringify()将在每个“级别”的输出中插入一个换行符和指定数量的空格。如果指定的第三个参数是非空字符串,JSON.stringify()将插入一个换行符和字符串(仅前十个字符)来缩进层次结构;

动词(verb的缩写)JSON.parse()的完整版本。

1.介绍

解析JSON格式的字符串。

2.摘要

JSON.parse(s[,reviver])

3.参数。

s,要解析的字符串。

Reviver,可选参数,用于转换解析值的可选函数。

4.返回。

对象、数组或原始值。返回值是从s解析而来的(并且可能会被reviver修改);

5.描述。

(1)如果指定了reviver函数,则对于从s解析的每个原始值(而不是包含这些原始值的对象或数组),将调用该函数一次。使用两个参数调用reviver,第一个参数是对象——的属性名或转换为字符串的数组序列号,第二个参数是对象属性或数组元素的原始值。并且,reviver函数的返回值将是JSON.parse()的返回值;

以上与JavaScript对象序列化相关,希望对大家的学习有所帮助。

更多资讯
游戏推荐
更多+