js對(duì)象中什么是可枚舉性(enumerable)?

說(shuō)到枚舉,可能很多人都會(huì)想到枚舉類型,但在javascript對(duì)象中有一個(gè)屬性為可枚舉性,他是什么呢?

概念

可枚舉性(enumerable)用來(lái)控制所描述的屬性,是否將被包括在for...in循環(huán)之中。具體來(lái)說(shuō),如果一個(gè)屬性的enumerable為false,下面三個(gè)操作不會(huì)取到該屬性。

  • for..in循環(huán)
  • Object.keys方法
  • JSON.stringify方法

enumerable “隱身術(shù)”

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"]
Object.getOwnPropertyNames(0)
JSON.stringify(o)    // "{a:1,b:2,c:3}"

上面代碼中,d屬性的enumerable為false,所以一般的遍歷操作都無(wú)法獲取該屬性,使得它有點(diǎn)像“秘密”屬性,但還是可以直接獲取它的值。

至于for...in循環(huán)和Object.keys方法的區(qū)別,在于前者包括對(duì)象繼承自原型對(duì)象的屬性,而后者只包括對(duì)象本身的屬性。

如果需要獲取對(duì)象自身的所有屬性,不管enumerable的值,可以使用Object.getOwnPropertyNames方法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 函數(shù)和對(duì)象 1、函數(shù) 1.1 函數(shù)概述 函數(shù)對(duì)于任何一門語(yǔ)言來(lái)說(shuō)都是核心的概念。通過(guò)函數(shù)可以封裝任意多條語(yǔ)句,而且...
    道無(wú)虛閱讀 4,959評(píng)論 0 5
  • 概述 JavaScript提供了一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu),用來(lái)描述一個(gè)對(duì)象的屬性的行為,控制它的行為。這被稱為“屬性描述對(duì)...
    zjh111閱讀 785評(píng)論 0 0
  • 概述 JavaScript提供了一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu),用來(lái)描述一個(gè)對(duì)象的屬性的行為,控制它的行為。這被稱為“屬性描述對(duì)...
    許先生__閱讀 564評(píng)論 0 1
  • 屬性的簡(jiǎn)潔表示法 ES6允許直接寫入變量和函數(shù),作為對(duì)象的屬性和方法。 上面代碼表明,ES6允許在對(duì)象之中,直接寫...
    oWSQo閱讀 570評(píng)論 0 0
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 2,678評(píng)論 9 22

友情鏈接更多精彩內(nèi)容