成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

[[400310]]

 1 簡介

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

下面測試方法所用的對象如下所示:

  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 返回一個所有元素為字符串的數(shù)組,其元素來自于從給定的object上面可直接枚舉的屬性(不含Symbol屬性)。這些屬性的順序與手動遍歷該對象屬性時的一致。

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

Object.values(obj)

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

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

Object.entries(obj)

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

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

Object.getOwnPropertyNames(obj)

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

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

Object.getOwnPropertySymbols(obj)

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

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

for……in

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

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

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

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

(4)for...in更適合便利對象,不要使用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結構、類數(shù)組對象(arguments、DOMNodeList對象……)、Generator對象以及字符串

  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)

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

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

2 特點總結

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

3 遍歷順序

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

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

用下面代碼來驗證上述遍歷規(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) ] 

本文轉載自微信公眾號「執(zhí)鳶者」,可以通過以下二維碼關注。轉載本文請聯(lián)系執(zhí)鳶者公眾號。

 

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

2021-05-12 07:04:55

Js變量方式

2021-10-19 22:23:05

typeof方式Instanceof

2021-05-09 22:00:59

TypeofInstanceof運算符

2021-05-30 19:02:59

變量對象上下文

2021-06-07 07:01:43

js關鍵字運行

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-11-03 06:57:41

瀏覽器Jsonp安全

2021-12-03 06:59:23

操作符驗證點屬性

2021-07-08 07:01:53

瀏覽器安全前端

2021-07-19 07:02:10

瀏覽器進程單進程瀏覽器

2021-11-19 09:01:09

防抖節(jié)流前端

2021-07-26 05:01:55

瀏覽器渲染流程

2021-10-18 09:01:01

前端賦值淺拷貝

2021-08-04 06:56:49

HTTP緩存前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级二级视频 | 一起操网站| 成人精品一区二区户外勾搭野战 | 黄色在线免费观看视频 | 久久久91精品国产一区二区三区 | 亚洲美女在线一区 | 国产在线一级片 | 在线观看 亚洲 | 亚洲二区在线 | 国产亚洲精品久久久久动 | 日韩av高清 | www.亚洲区| 黄色香蕉视频在线观看 | 亚洲综合区 | 久久国产精99精产国高潮 | 毛片一区二区 | 久久成人国产精品 | 日韩综合网 | 天天射色综合 | 日本a∨视频 | 婷婷免费在线 | 最新黄色毛片 | 精品久久久久久久久久久久久久 | 毛片免费看 | 精品久久久久久亚洲精品 | 久久亚洲国产精品日日av夜夜 | 欧美日本一区 | 亚洲国产一区在线 | 欧美日韩亚洲国产 | 免费视频一区二区 | 国产综合久久 | 久久国产精品久久久久 | 国产精品一区二区久久久久 | 成人网av | 成人毛片视频免费 | 午夜久久久久 | 99在线免费视频 | 啪啪免费网 | 欧美成人高清 | 一级片在线免费看 | 综合二区 |