獲取對(duì)象鍵值的幾種方法

獲取對(duì)象鍵值的幾種方法包括:

  • 1、for in
  • 2、Object.keys()
  • 3、Object.getOwnPropertyNames()
  • 4、Object.getOwnPropertySymbols()
  • 5、Reflect.ownKeys()

下面具體探討這些方法的特點(diǎn)和適用場(chǎng)景:

1、for in

主要用于遍歷對(duì)象的可枚舉屬性,包括自有屬性、繼承自原型的屬性。

const obj = { name: 'abby', career: 'it' }
Object.defineProperty(obj, 'age', {
  value: 'forever 18',
  enumerable: false
})
Object.prototype.protoProp1 = function () {
  console.log('proto')
}
Object.prototype.protoProp2 = 2

console.log('For In : ')
for (const a in obj) console.log(a)
image.png

2、Object.keys()

這是一個(gè)基礎(chǔ)且常用的方法,它返回一個(gè)包含對(duì)象所有可枚舉屬性名稱的數(shù)組。
該方法不會(huì)列出原型鏈上的屬性,只關(guān)注對(duì)象自身的直接屬性。
例如,對(duì)于對(duì)象let obj = {a: 1, b: 2}; Object.keys(obj)將返回['a', 'b']。
此方法適用于大多數(shù)日常開發(fā)需求,特別是當(dāng)你需要知道對(duì)象有哪些直接屬性時(shí)。

3、Object.getOwnPropertyNames()

與Object.keys()不同,Object.getOwnPropertyNames()不僅返回可枚舉的屬性名,還返回不可枚舉的屬性名。
這意味著,如果對(duì)象的屬性被標(biāo)記為不可枚舉(使用Object.defineProperty()),Object.keys()將無法看到這些屬性,而Object.getOwnPropertyNames()則可以。

4、Object.getOwnPropertySymbols()

此方法專注于獲取對(duì)象的所有Symbol類型的鍵。
由于Symbol是一種特殊的數(shù)據(jù)類型,用于創(chuàng)建唯一的標(biāo)識(shí)符,因此這個(gè)方法在處理具有Symbol鍵的對(duì)象時(shí)非常有用。
例如,如果你有一個(gè)使用Symbol作為鍵的對(duì)象,并且你想復(fù)制這個(gè)對(duì)象或遍歷它的屬性,你可以使用這個(gè)方法來獲取所有的Symbol鍵。

5、Reflect.ownKeys()

這是一個(gè)更全面的方法,返回對(duì)象自身的所有鍵,包括字符串和Symbol類型的鍵,以及可枚舉和不可枚舉的鍵。這使它成為獲取對(duì)象所有自有屬性的最全面的方法。
與Object.keys()相比,Reflect.ownKeys()提供了對(duì)對(duì)象屬性的更完整的視圖,特別是在涉及不可枚舉屬性或Symbol屬性時(shí)。

以下是關(guān)于這些方法的使用場(chǎng)景及注意事項(xiàng)

當(dāng)需要列出對(duì)象的所有自有屬性(不論可枚舉性)時(shí),Reflect.ownKeys()是最合適的選擇。
如果只關(guān)心對(duì)象的可枚舉屬性,可以使用Object.keys()。這是最常用的方法,適用于大多數(shù)情況。
當(dāng)對(duì)象可能包含不可枚舉屬性時(shí),應(yīng)使用Object.getOwnPropertyNames()來確保不遺漏任何屬性。
對(duì)于使用Symbol作為鍵的對(duì)象,Object.getOwnPropertySymbols()是唯一的選擇。
在實(shí)際開發(fā)中,根據(jù)具體需求選擇合適的方法,可以有效地解決問題并優(yōu)化性能。

最后編輯于
?著作權(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)容

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