自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

前端百題斬之—— JS中9種遍歷對(duì)象的方法

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

[[400310]]

 1 簡(jiǎn)介

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

下面測(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ù)組,其元素來自于從給定的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ì)象上找到的可枚舉屬性值。屬性的順序與通過手動(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ù)組。屬性的順序與通過手動(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ì)象以及字符串
forEach break不能中斷循環(huán)
Reflect.ownKeys(obj) 對(duì)象自身所有屬性

3 遍歷順序

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

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

用下面代碼來驗(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ān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系執(zhí)鳶者公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: 執(zhí)鳶者
相關(guān)推薦

2021-05-12 07:04:55

Js變量方式

2021-10-19 22:23:05

typeof方式Instanceof

2021-05-09 22:00:59

TypeofInstanceof運(yùn)算符

2021-05-30 19:02:59

變量對(duì)象上下文

2021-06-07 07:01:43

js關(guān)鍵字運(yùn)行

2021-07-14 07:00:53

瀏覽器技巧前端

2021-06-02 07:02:42

js作用域函數(shù)

2021-07-05 07:02:33

前端跨域策略

2021-06-28 07:12:28

賦值淺拷貝深拷貝

2021-05-16 19:23:11

引用類型包裝

2021-07-26 06:57:58

重繪回流前端

2021-06-09 07:01:30

前端CallApply

2021-07-19 07:02:10

瀏覽器進(jìn)程單進(jìn)程瀏覽器

2021-07-08 07:01:53

瀏覽器安全前端

2021-11-03 06:57:41

瀏覽器Jsonp安全

2021-12-03 06:59:23

操作符驗(yàn)證點(diǎn)屬性

2021-11-19 09:01:09

防抖節(jié)流前端

2021-07-26 05:01:55

瀏覽器渲染流程

2021-08-04 06:56:49

HTTP緩存前端

2021-10-18 09:01:01

前端賦值淺拷貝
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)