方法介绍
JSON.Stringify是日常开发中常用到的JSON对象中的一个方法。JSON对象有两个方法,一个是 解析JSON字符串的parse();一个是将对象转换成字符串的stringify()。在这里就列举一下使用 JSON.Stringify的几个注意事项。
示例
以一个涵盖了大部分数据类型的对象为例:
let my_obj = {
func: function () {
alert(1);
},
obj: { a: 1 },
arr: [1, 2, 3],
und: undefined,
reg: /123/,
date: new Date(0),
NaN: NaN,
infinity: Infinity,
sym: Symbol(1)
};
Object.defineProperty(my_obj, "innumerable", {
enumerable: false,
value: "innumerable"
});
console.log("obj1", obj1);
let str = JSON.stringify(my_obj);
let my_obj2 = JSON.parse(str);
console.log('obj2',my_obj2);
运行结果如下:
使用 JSON.stringify再JSON.parse的数据,前后变化表明,使用JSON.stringify序列化之后的数据,在JSON.parse会丢失部分数据。
JSON.stringify序列化数据的注意事项
-
使用
JSON.Stringify转换的数据中,如果包含function,undefined,Symbol,这几种类型,不可枚举属性, JSON.Stringify序列化后,这个键值对会消失。 -
转换的数据中包含
NaN,Infinity值(含-Infinity),JSON序列化后的结果会是null。 -
转换的数据中包含
Date对象,JSON.Stringify序列化之后,会变成字符串。 -
转换的数据包含
RegExp引用类型序列化之后会变成空对象。 -
无法序列化不可枚举属性。
-
无法序列化对象的循环引用,(例如:
obj[key] = obj)。 -
无法序列化对象的原型链。
注意: 虽然
JSON.Stringify使用起来简单又方便,但是,在使用JSON.Stringify要考虑到以上问题,避免给自己挖坑。