资讯专栏INFORMATION COLUMN

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

Leck1e / 3962人阅读

摘要:引言说到枚举,可能很多人都会想到枚举类型,但在对象中有一个属性为可枚举性,他是什么呢概念可枚举性用来控制所描述的属性,是否将被包括在循环之中。至于循环和方法的区别,在于前者包括对象继承自原型对象的属性,而后者只包括对象本身的属性。

引言

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

概念

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

enumerable “隐身术”
javascriptvar 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方法

  

来自 搞起博客

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91508.html

相关文章

  • 浅谈 JS 对象之扩展、密封及冻结三大特

    摘要:尝试删除一个密封对象的属性或者将某个密封对象的属性从数据属性转换成访问器属性,结果会静默失败或抛出异常严格模式。 扩展特性 Object.isExtensible 方法 Object.preventExtensions 方法 密封特性 Object.isSealed 方法 Object.seal 方法 冻结特性 Object.isFrozen 方法 Object...

    ChristmasBoy 评论0 收藏0
  • JS冻结对象的《人间词话》 完美实现究竟有几层境界?

    摘要:王国维在人间词话里谈到了治学经验,他说古今之成大事业大学问者,必经过三种之境界。其中谈到中冻结一个对象几种由浅入深的实践。王国维已先自表明,吾人可以无劳纠葛。总结本文先后介绍了关于冻结一个对象的三种进阶方法。 王国维在《人间词话》里谈到了治学经验,他说:古今之成大事业、大学问者,必经过三种之境界。 巧合的是,最近受 git chat / git book 邀请,做了一个分享。其中谈到J...

    YorkChen 评论0 收藏0
  • JS冻结对象的《人间词话》 完美实现究竟有几层境界?

    摘要:王国维在人间词话里谈到了治学经验,他说古今之成大事业大学问者,必经过三种之境界。其中谈到中冻结一个对象几种由浅入深的实践。王国维已先自表明,吾人可以无劳纠葛。总结本文先后介绍了关于冻结一个对象的三种进阶方法。 王国维在《人间词话》里谈到了治学经验,他说:古今之成大事业、大学问者,必经过三种之境界。 巧合的是,最近受 git chat / git book 邀请,做了一个分享。其中谈到J...

    高胜山 评论0 收藏0
  • 【进阶4-2期】Object.assign 原理及其实现

    摘要:木易杨注意原始类型被包装为对象木易杨原始类型会被包装,和会被忽略。木易杨原因在于时,其属性描述符为不可写,即。木易杨解决方法也很简单,使用我们在进阶期中介绍的就可以了,使用如下。 引言 上篇文章介绍了赋值、浅拷贝和深拷贝,其中介绍了很多赋值和浅拷贝的相关知识以及两者区别,限于篇幅只介绍了一种常用深拷贝方案。 本篇文章会先介绍浅拷贝 Object.assign 的实现原理,然后带你手动实...

    layman 评论0 收藏0

发表评论

0条评论

Leck1e

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<