js对象中什么是可罗列性(enumerable)?

弁言

说到罗列,能够很多人都邑想到罗列范例,但在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://segmentfault.com/a/1190000002953364
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞