js对象的可枚举性

js对象中什么是可枚举性(enumerable)?

引言

说到枚举,可能很多人都会想到枚举类型,但在javascript对象中有一个属性为可枚举性,他是什么呢?

概念

可枚举性(enumerable)用来控制所描述的属性,是否将被包括在for…in循环之中。具体来说,如果一个属性的enumerable为false,下面三个操作不会取到该属性。

  • for…in循环
  • Object.keys方法
  • JSON.stringify方法

enumerable “隐身术”

var o = {a:1, b:2};

o.c = 3;
Object.defineProperty(o, 'd', {
  value: 4,
  enumerable: false
});

o.d
// 4

for( var key in o ) console.log( o[key] ); 
// 1
// 2
// 3

Object.keys(o)  // ["a", "b", "c"]

JSON.stringify(o // => "{a:1,b:2,c:3}"

上面代码中,d属性的enumerablefalse,所以一般的遍历操作都无法获取该属性,使得它有点像“秘密”属性,但还是可以直接获取它的值。

至于for...in循环和Object.keys方法的区别,在于前者包括对象继承自原型对象的属性,而后者只包括对象本身的属性。如果需要获取对象自身的所有属性,不管enumerable的值,可以使用Object.getOwnPropertyNames方法

回答: 在JavaScript中,虽然没有真正的枚举类型,但我们可以使用模拟枚举的方式来实现类似的功能。一种常见的方式是使用对象字面量来表示枚举成员。例如,我们可以创建一个表示颜色的枚举: const Color = { RED: 'red', GREEN: 'green', BLUE: 'blue' }; 这样,我们就可以通过Color.RED、Color.GREEN和Color.BLUE来访问枚举成员。这种方式虽然不具备类型安全,但可以提供一些便利。 另一种方式是使用Object.freeze()方法来冻结枚举对象,以防止在运行时修改枚举成员的值。例如: const Color = Object.freeze({ RED: 'red', GREEN: 'green', BLUE: 'blue' }); 这样,我们就无法在运行时修改Color对象中的属值。 需要注意的是,在JavaScript中,我们可以在任意时间重写常量的值,或者在枚举成员中添加新的属。因此,如果你想避免这些情况,可以考虑使用Object.freeze()方法来冻结枚举对象。 总结来说,虽然JavaScript没有原生的枚举类型,但我们可以使用对象字面量或Object.freeze()方法来模拟枚举,并实现类似的功能。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* *3* [在JavaScript中写枚举](https://blog.csdn.net/qq_40962416/article/details/82861032)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值