我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

继续说一下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,就是不可以被列出。

相关链接

总结

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

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   js