JSON.stringify()方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串,如果指定了replacer是一个函数,则可以替换值,或者如果指定了replacer是一个数组,可选的仅包括指定的属性。
语法
JSON.stringify(value[, replacer [, space]])
但是,当有一天,你使用JSON.stringify转换js对象,如
wtf!页面上命名是有p元素的呀,你不服输的输出 element,发现是有内容的,又输出typeof element ,显示Object
于是你陷入了沉思,dom没学好的你准备看看element这家伙到底是个啥,于是手指一敲
哦~原来是HTMLParagraphElement这个特殊对象,会不会是这个对象不能用JSON.stringify方法啊,我们去MDN查查
看完了不可序列化的注意事项,发现并没有专门针对htmlElement的说明,仔细看一下规则,会不会是htmlElement符合不可枚举这一特殊说法呢,我们来看一下吧
然后你发现,输出了很多属性,这就证明element有可枚举属性吗
图样图森破了!
判断属性是否可以枚举,既可以使用for...in来判断,也可以使用propertyIsEnumerable来判断,他们两个的区别是for...in会把原型链上的可枚举属性也挖掘出来MDN说明
所以,判断对象属性是否可用枚举应该用
最终发现,htmlElement真的是不可枚举的,所以JSON.stringify会忽视它的所有属性,输出{}
评论 (0 )
最新评论
暂无评论
赶紧努力消灭 0 回复