写在前面:原谅我这个菜鸡在学了两三年前端对js基础还是很多盲区(哭唧唧)。在写这篇文章的时候真的超级庆幸还好当初面试官没问到这种问题。
JSON.stringify(value[, replacer [, space]])
JSON.stringify()
一
undefined
、Symbol
、任意函数
作为对象属性被JSON序列化时,会跳过对他们的序列化undefined
、Symbol
、任意函数
作为数组元素被JSON序列化时,会被转化为null
undefined
、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
用来控制序列化之后字符串的间距