写在前面:原谅我这个菜鸡在学了两三年前端对js基础还是很多盲区(哭唧唧)。在写这篇文章的时候真的超级庆幸还好当初面试官没问到这种问题。
JSON.stringify(value[, replacer [, space]])
JSON.stringify()
一
undefined、Symbol、任意函数作为对象属性被JSON序列化时,会跳过对他们的序列化undefined、Symbol、任意函数作为数组元素被JSON序列化时,会被转化为nullundefined、Symbol、任意函数直接被JSON序列化时,会被转化为undefined
二
由于第一条特性,所以JSON在序列化对象时,不能保证对象属性是按顺序输出的(因为有的属性会被跳过)
三
JSON.stringify()序列化含toJSON属性的对象,将会返回toJSON()的返回值
1 | const obj = { |
四
JSON.stringify()会正常序列化Date的值,因为Date对象内置有toJSON()方法。
五
NaN和Infinity格式的数值及null都会被当作null
六
基本包装类型会被序列化为最原始的基本类型
七
其他类型的对象被,如(Map/Set等)仅会序列化可枚举的属性(enumerable)
1 | JSON.stringify( |
JSON.stringify()的第二个参数replacer
replacer作为函数
1 |
|
replacer作为数组
数组的值就代表了被序列化曾JSON字符串的属性名
1 | const data = { |
space
用来控制序列化之后字符串的间距