包租婆,JSON.stringify()为什么不能用了?!因为没有枚举属性哇!

原创 西红柿是小贱猫 教程 js基础知识 249阅读 2018-06-27 18:01:10 举报

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 回复