欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中如何遍歷對(duì)象(方法匯總)

 更新時(shí)間:2025年07月08日 08:57:37   作者:前端風(fēng)云志  
文章介紹了JavaScript中遍歷對(duì)象的多種方法,包括for...in(含繼承屬性)、Object.keys/values/entries(不含繼承屬性,支持Symbol)及Reflect.ownKeys,并強(qiáng)調(diào)TypeScript需添加索引簽名以避免報(bào)錯(cuò),感興趣的朋友跟隨小編一起看看吧

今天來(lái)點(diǎn)稍微輕松的話題,如何在JavaScript中遍歷對(duì)象,在平常的工作中,遍歷對(duì)象是很常見(jiàn)的操作,javascript提供了多種方法來(lái)遍歷對(duì)象的屬性。這些方法各有特點(diǎn),不同的場(chǎng)景需要使用不同的方法。

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

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

for...in

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

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

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

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

輸出如下:

name Philip
age 18

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

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

輸出如下:

name Philip
age 18
customProperty Hello World

如果你只想遍歷對(duì)象自身的屬性,可以使用Object.hasOwnProperty方法來(lái)過(guò)濾掉原型鏈上的屬性。

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

使用for...of + Object.keys

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

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

使用for...of + Object.values

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

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

輸出如下:

Philip
18

for...of + Object.entries

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

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

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

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

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

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

Object.entries + forEach

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

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

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

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

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

Reflect.ownKeys

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

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會(huì)報(bào)錯(cuò),具體原因可以看這篇:

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

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

到此這篇關(guān)于JavaScript中如何遍歷對(duì)象的文章就介紹到這了,更多相關(guān)JavaScript遍歷對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用不到200行代碼寫一款屬于你自己的js類庫(kù)

    利用不到200行代碼寫一款屬于你自己的js類庫(kù)

    這篇文章主要給大家介紹了如何利用不到200行代碼寫一款屬于你自己的js類庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • JavaScript 程序編碼規(guī)范

    JavaScript 程序編碼規(guī)范

    這是一套適用于JavaScript程序的編碼規(guī)范。它基于Sun的Java程序編碼規(guī)范。但進(jìn)行了大幅度的修改, 因?yàn)镴avaScript不是Java。
    2010-11-11
  • JavaScript四種調(diào)用模式和this示例介紹

    JavaScript四種調(diào)用模式和this示例介紹

    JavaScript調(diào)用時(shí)除了聲明時(shí)定義的形參外,每個(gè)函數(shù)接受兩個(gè)附加參數(shù):this 和arguments,下面為大家介紹下JavaScript四種調(diào)用模式和this
    2014-01-01
  • js驗(yàn)證身份證號(hào)碼記錄的方法

    js驗(yàn)證身份證號(hào)碼記錄的方法

    在一些需要填寫身份證的表單網(wǎng)頁(yè)中,需要對(duì)身份證的輸入做一個(gè)驗(yàn)證,于是,我記錄下了自己寫的驗(yàn)證。這篇文章主要介紹了js驗(yàn)證身份證號(hào)碼記錄的方法,需要的朋友可以參考下
    2019-04-04
  • JavaScript 監(jiān)聽(tīng)textarea中按鍵事件

    JavaScript 監(jiān)聽(tīng)textarea中按鍵事件

    不同的瀏覽器中的事件監(jiān)聽(tīng)機(jī)制是不同的,以onKeyPress事件為例。
    2009-10-10
  • 關(guān)于Blog頂部的滾動(dòng)導(dǎo)航條代碼

    關(guān)于Blog頂部的滾動(dòng)導(dǎo)航條代碼

    關(guān)于Blog頂部的滾動(dòng)導(dǎo)航條代碼...
    2006-09-09
  • 原生JS中slice()方法和splice()區(qū)別

    原生JS中slice()方法和splice()區(qū)別

    slice()方法和splice()方法都是原生js中對(duì)數(shù)組操作的方法。那么他兩種有什么區(qū)別呢?今天通過(guò)本文教程給大家簡(jiǎn)單介紹下,需要的朋友可以參考下
    2017-03-03
  • js點(diǎn)擊圖片實(shí)現(xiàn)查看大圖簡(jiǎn)單方法

    js點(diǎn)擊圖片實(shí)現(xiàn)查看大圖簡(jiǎn)單方法

    今天開(kāi)發(fā)的時(shí)候,遇到要點(diǎn)擊縮略圖之后顯示圖片的大圖查看,所以本文給大家分享下,這篇文章主要給大家介紹了關(guān)于js點(diǎn)擊圖片實(shí)現(xiàn)查看大圖的簡(jiǎn)單方法,需要的朋友可以參考下
    2023-06-06
  • jQuery右下角旋轉(zhuǎn)環(huán)狀菜單特效代碼

    jQuery右下角旋轉(zhuǎn)環(huán)狀菜單特效代碼

    jquery實(shí)現(xiàn)右下角旋轉(zhuǎn)環(huán)形菜單特效代碼,是固定在頁(yè)面右下角位置,當(dāng)用戶點(diǎn)擊了主菜單按鈕后,子菜單項(xiàng)會(huì)以環(huán)狀旋轉(zhuǎn)進(jìn)入頁(yè)面,并使用animate.css制作動(dòng)畫(huà)效果,有需要的朋友可以參考下
    2015-08-08
  • JavaScript HTML DOM元素 節(jié)點(diǎn)操作匯總

    JavaScript HTML DOM元素 節(jié)點(diǎn)操作匯總

    這篇文章主要介紹了JavaScript HTML DOM元素 節(jié)點(diǎn)操作匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評(píng)論