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

本文深入探讨了JavaScript中对象属性的可枚举性概念,解释了如何通过设置enumerable属性来控制for...in循环、Object.keys方法及JSON.stringify方法是否能访问到特定属性。并介绍了如何使用Object.getOwnPropertyNames方法获取对象的所有属性。

引言

说到枚举,可能很多人都会想到枚举类型,但在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属性的 enumerable 为 false ,所以一般的遍历操作都无法获取该属性,使得它有点像“秘密”属性,但还是可以直接获取它的值。

至于 for...in 循环和 Object.keys 方法的区别,在于前者包括对象继承自 原型对象的 属性,而后者只包括对象 本身的 属性。

如果需要获取对象自身的所有属性,不管enumerable的值,可以使用 Object.getOwnPropertyNames 方法

转载于:https://www.cnblogs.com/douglasvegas/p/5430671.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值