本博客不欢迎:各种镜像采集行为。请尊重国家相关法律法规,大家都是程序员,不要闹得不开心。

继续说一下js中的object的属性问题,本文的目标是打造一个可枚举的属性。可枚举的意思,就是可以在循环里面列出来。大家看范例,可以进一步说明。

苏南大叔:js中object的property系列,如何打造一个可枚举属性? - js-object-enumerable
js中object的property系列,如何打造一个可枚举属性?(图1-1)

本文测试环境:chrome@87.0.4280.88。重点讲述的是:enumerable参数。

如何遍历object

这里选用了一个for in语句,具体范例如下:

var obj = {a: 1, b: 2, c: 3};
for (const prop in obj) {
  console.log(`obj.${prop} = ${obj[prop]}`);
}

输出结果如下:

// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"

enumerable参数

如果上述例子中的abc,使用defineProperty()来定义,并设置enumerable参数的话,那么将会有什么样的变化呢?请看下面的例子:

const object1 = {
  property1:'p1'
};
Object.defineProperty(object1, 'property2', {
  value: 'p2'
});
Object.defineProperty(object1, 'property3', {
  value: 'p3',
  enumerable:true
});
Object.defineProperty(object1, 'property4', {
  value: 'p4',
  enumerable:false
});
for (const prop in object1) {
  console.log(`object1.${prop} = ${object1[prop]}`);
}

运行结果如下:

> "object1.property1 = p1"
> "object1.property3 = p3"

默认值歧义

在这里,苏南大叔得出的结论,是这样的:这个enumerable默认值和configurable默认值的结论差不多。在默认的创建属性的方式下,enumerable默认值是true,可以被列出。但是在defineProperty()下,configurable默认值是false,就是不可以被列出。

相关链接

总结

呃,历史总是惊人的相似。更多文章,请参考下面的链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

本站的忠实读者小伙伴,正在阅读下面这些文章: