日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
前端百題斬之—— JS中9種遍歷對(duì)象的方法

 1 簡(jiǎn)介

對(duì)象是在編程中最常見(jiàn)的部分,很多情況下需要遍歷該對(duì)象上的屬性,那么有幾種方式可以幫助我們遍歷該對(duì)象上的屬性呢?下面一起來(lái)了解九種方法。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、婺城網(wǎng)站維護(hù)、網(wǎng)站推廣。

下面測(cè)試方法所用的對(duì)象如下所示:

 
 
 
 
  1. const parentObj = { 
  2.     a: 'aaaaa', 
  3.     b: Symbol('bbbbb'), 
  4.     c: 'ccccc' 
  5. }; 
  6.  
  7. const Obj = Object.create(parentObj, { 
  8.     d: { 
  9.         value: 'ddddd', 
  10.         enumerable: true 
  11.     }, 
  12.     e: { 
  13.         value: 'eeeee', 
  14.         enumerable: false 
  15.     }, 
  16.     [Symbol('f')]: { 
  17.         value: 'fffff', 
  18.         enumerable: true 
  19.     } 
  20. }); 

Object.keys(obj)

Object.keys 返回一個(gè)所有元素為字符串的數(shù)組,其元素來(lái)自于從給定的object上面可直接枚舉的屬性(不含Symbol屬性)。這些屬性的順序與手動(dòng)遍歷該對(duì)象屬性時(shí)的一致。

 
 
 
 
  1. console.log('Object.keys()', Object.keys(Obj)); // Object.keys() [ 'd' ] 

Object.values(obj)

Object.values()返回一個(gè)數(shù)組,其元素是在對(duì)象上找到的可枚舉屬性值。屬性的順序與通過(guò)手動(dòng)循環(huán)對(duì)象的屬性值所給出的順序相同。

 
 
 
 
  1. console.log('Object.values()', Object.values(Obj)); // Object.values() [ 'ddddd' ] 

Object.entries(obj)

Object.entries()返回一個(gè)數(shù)組,其元素是與直接在object上找到的可枚舉屬性鍵值對(duì)相對(duì)應(yīng)的數(shù)組。屬性的順序與通過(guò)手動(dòng)循環(huán)對(duì)象的屬性值所給出的順序相同。

 
 
 
 
  1. console.log('Object.entries()', Object.entries(Obj)); // Object.entries() [ [ 'd', 'ddddd' ] ] 

Object.getOwnPropertyNames(obj)

Object.getOwnPropertyNames()方法返回一個(gè)由指定對(duì)象的所有自身屬性的屬性名(包括不可枚舉屬性但不包括Symbol值作為名稱的屬性)組成的數(shù)組。

 
 
 
 
  1. console.log('Object.getOwnPropertyNames()', Object.getOwnPropertyNames(Obj)); // Object.getOwnPropertyNames() [ 'd', 'e' ] 

Object.getOwnPropertySymbols(obj)

Object.getOwnPropertySymbols() 方法返回一個(gè)給定對(duì)象自身的所有 Symbol 屬性的數(shù)組。

 
 
 
 
  1. console.log('Object.getOwnPropertySymbols()', Object.getOwnPropertySymbols(Obj)); // Object.getOwnPropertySymbols() [ Symbol(f) ] 

for……in

遍歷所有可枚舉的屬性(包括原型上的),然后可利用hasOwnProperty判斷對(duì)象是否包含特定的自身(非繼承)屬性,其具有以下特點(diǎn):

(1)index索引為字符串型數(shù)字,不能直接進(jìn)行幾何運(yùn)算

(2)遍歷順序有可能不是按照實(shí)際數(shù)組的內(nèi)部順序

(3)會(huì)遍歷數(shù)組的所有可枚舉屬性,包括原型

(4)for...in更適合便利對(duì)象,不要使用for...in遍歷數(shù)組

 
 
 
 
  1. for(let key in Obj) { 
  2.     // for in: d 
  3.     // for in: a 
  4.     // for in: b 
  5.     // for in: c 
  6.     console.log('for in:', key); 

for……of

必須部署了Iterator接口后才能使用。使用范圍:數(shù)組、Set和Map結(jié)構(gòu)、類數(shù)組對(duì)象(arguments、DOMNodeList對(duì)象……)、Generator對(duì)象以及字符串

 
 
 
 
  1. for(let value of Object.values(Obj)) { 
  2.     // for of: ddddd 
  3.     console.log('for of:', value); 

forEach

使用break不能中斷循環(huán)使用

 
 
 
 
  1. Object.values(Obj).forEach(value => { 
  2.     // forEach: ddddd 
  3.     console.log('forEach:', value); 
  4. }); 

Reflect.ownKeys(obj)

返回一個(gè)數(shù)組,包含對(duì)象自身的所有屬性,不管屬性名是Symbol還是字符串,也不管是否可枚舉。

 
 
 
 
  1. console.log('Reflect.ownKeys()', Reflect.ownKeys(Obj)); // Reflect.ownKeys() [ 'd', 'e', Symbol(f) ] 

2 特點(diǎn)總結(jié)

類型特點(diǎn)
Object.keys(obj)返回對(duì)象本身可直接枚舉的屬性(不含Symbol屬性)
Object.values(obj)返回對(duì)象本身可直接枚舉的屬性值(不含Symbol屬性)
Object.entries(obj)返回對(duì)象本身可枚舉屬性鍵值對(duì)相對(duì)應(yīng)的數(shù)組(不含Symbol屬性)
Object.getOwnPropertyNames(obj)返回對(duì)象所有自身屬性的屬性名(不包括Symbol值作為名稱的屬性)
Object.getOwnPropertySymbols(obj)返回一個(gè)給定對(duì)象自身的所有 Symbol 屬性的數(shù)組
for……in所有可枚舉的屬性(包括原型上的)
for……of必須部署了Iterator接口后才能使用,例如數(shù)組、Set和Map結(jié)構(gòu)、類數(shù)組對(duì)象、Generator對(duì)象以及字符串
forEachbreak不能中斷循環(huán)
Reflect.ownKeys(obj)對(duì)象自身所有屬性

3 遍歷順序

上述遍歷對(duì)象的屬性時(shí)都遵循同樣的屬性遍歷次序規(guī)則:

  • 首先遍歷所有屬性名為數(shù)值的屬性,按照數(shù)字排序
  • 其次遍歷所有屬性名為字符串的屬性,按照生成時(shí)間排序
  • 最后遍歷所有屬性名為Symbol值的屬性,按照生成時(shí)間排序

用下面代碼來(lái)驗(yàn)證上述遍歷規(guī)則

 
 
 
 
  1. const Obj = { 
  2.     [Symbol(0)]: 'symbol', 
  3.     1 : '1', 
  4.     'c': 'c', 
  5.     '1a1': '11', 
  6.     22223333: '2', 
  7.     'd': 'd' 
  8. }; 
  9.  
  10. console.log(Reflect.ownKeys(Obj)); // [ '1', '22223333', 'c', '1a1', 'd', Symbol(0) ] 

本文轉(zhuǎn)載自微信公眾號(hào)「執(zhí)鳶者」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系執(zhí)鳶者公眾號(hào)。


網(wǎng)頁(yè)題目:前端百題斬之—— JS中9種遍歷對(duì)象的方法
網(wǎng)頁(yè)網(wǎng)址:http://www.5511xx.com/article/codpdcd.html