亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

js中如何遍歷對象?

freeflydom
2025年7月9日 14:52 本文熱度 834

今天來點稍微輕松的話題,如何在JavaScript中遍歷對象,在平常的工作中,遍歷對象是很常見的操作,javascript提供了多種方法來遍歷對象的屬性。這些方法各有特點,不同的場景需要使用不同的方法。

假設(shè)我們有一個Person對象,包含名字和年齡兩個屬性,下面看看有哪些方式可以遍歷這個對象。

const person = {
  name: 'Philip',
  age: 18,
};

for...in

遍歷對象最基本的方式就是使用for...in,這里需要注意區(qū)分和for...of的區(qū)別。

  • for...in - 遍歷可枚舉對象,比如Object。
  • for...of - 遍歷可迭代對象,比如Array。

在以下代碼中,key是每個屬性的名字 - 對應(yīng)nameage,而person[key]則是每個屬性的值 - 對應(yīng)Philip18。

for (const key in person) {
  console.log(key, person[key]);
}

輸出如下:

name Philip
age 18

for...in是遍歷對象最基本的方式,需要注意的是它不僅會遍歷對象自身的屬性,也會遍歷原型鏈上的屬性。假設(shè)我們在Object.prototype上添加一個屬性,那么這個屬性也會被遍歷到。

Object.prototype.customProperty = 'Hello World';
for (const key in person) {
  console.log(key, person[key]);
}

輸出如下:

name Philip
age 18
customProperty Hello World

如果你只想遍歷對象自身的屬性,可以使用Object.hasOwnProperty方法來過濾掉原型鏈上的屬性。

for (const key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key, person[key]);
  }
}

使用for...of + Object.keys

Object.keys方法返回一個對象中所有可枚舉屬性的鍵名并放到一個數(shù)組里,配合for...of可以很方便地遍歷對象的屬性。

for (const key of Object.keys(person)) {
  console.log(key, person[key]);
}

使用for...of + Object.values

如果你只關(guān)心對象的值,而不在key的話,那么可以使用Object.values方法,它返回一個包含對象所有可枚舉屬性值的數(shù)組。

for (const value of Object.values(person)) {
  console.log(value);
}

輸出如下:

Philip
18

for...of + Object.entries

下面的方法使用for...of進行遍歷,我們都知道for..of是用來遍歷可迭代對象的,所以Object.entries返回的一定是一個可迭代對象 - 這里是一個二維數(shù)組,然后[key, value]是一個解構(gòu)操作,負責(zé)解構(gòu)內(nèi)層一維數(shù)組中的值并輸出。

for (const [key, value] of Object.entries(person)) {
  console.log(key, value);
}

Object.entries(person)輸出如下,可以看作是一個鍵值對組成的二維數(shù)組。

[[name, 'Philip'], [age, 18]]

使用[key, value]進行解構(gòu)后正好得到兩組數(shù)據(jù):

key = name, value = 'Philip' // 第一組數(shù)據(jù)
key = age, value = 18 // 第二組數(shù)據(jù)

Object.entries + forEach

一個更加函數(shù)式的寫法是使用數(shù)組對象上的forEach方法。

Object.entries(person).forEach(([key, value]) => {
  console.log(key, value);
});

forEach本質(zhì)上和for...of并無區(qū)別,在使用鏈?zhǔn)讲僮鲿r,這種方式可讀性更好,比如和filter等方法串聯(lián)調(diào)用時。

Object.entries(person)
  .filter(([key, value]) => key !== 'age') // 過濾掉 age 屬性
  .forEach(([key, value]) => console.log(key));

還有一點要注意,那就是forEach是無法中斷的,比如不能使用continue或者break來中斷循環(huán),但是for...infor...of則不受此限制。

Reflect.ownKeys

如果你的對象中有Symbol類型的屬性,那么可以使用Reflect.ownKeys方法來獲取所有屬性的鍵名。

const person = {
  name: 'Philip',
  age: 18,
  [Symbol('id')]: 123,
};
Reflect.ownKeys(person).forEach(key => {
  console.log(key, person[key]);
});

輸出如下:

name Philip
age 18
Symbol(id) 123

Reflect.ownKeys是遍歷Symbol類型屬性的唯一方法。

最后,如果你使用的是TypeScript,那么所有使用了索引操作的遍歷方式(比如person[key])都需要添加索引簽名,否則TypeScript會報錯,具體原因可以看這篇:

好了最后用表格總結(jié)一下:

方法包含繼承屬性包含Symbol包含不可枚舉屬性TypeScript支持
for...in???需要索引簽名
Object.keys()????
Object.values()????
Object.entries()????
Reflect.ownKeys()????

轉(zhuǎn)自https://www.cnblogs.com/graphics/p/18972113


該文章在 2025/7/9 14:52:31 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved