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

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

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

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

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

Object.values(obj)

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

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

Object.entries(obj)

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

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

Object.getOwnPropertyNames(obj)

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

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

Object.getOwnPropertySymbols(obj)

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

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

for……in

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

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

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

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

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

  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接口后才能使用。使用范圍:數組、Set和Map結構、類數組對象(arguments、DOMNodeList對象……)、Generator對象以及字符串

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

forEach

使用break不能中斷循環使用

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

Reflect.ownKeys(obj)

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

3 遍歷順序

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

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

用下面代碼來驗證上述遍歷規則

  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) ] 

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

 

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

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作用域函數

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

瀏覽器進程單進程瀏覽器

2021-11-03 06:57:41

瀏覽器Jsonp安全

2021-12-03 06:59:23

操作符驗證點屬性

2021-07-08 07:01:53

瀏覽器安全前端

2021-11-19 09:01:09

防抖節流前端

2021-07-26 05:01:55

瀏覽器渲染流程

2021-10-18 09:01:01

前端賦值淺拷貝

2021-08-04 06:56:49

HTTP緩存前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产高清久久久 | 久久久久亚洲精品 | 国产精品69毛片高清亚洲 | 国产精品日韩欧美 | 国产精品国产三级国产aⅴ中文 | 免费在线观看av网站 | 91精品久久久久久久久 | 视频一区中文字幕 | 精品国产乱码一区二区三区a | 亚洲精品视频久久 | 国产精品一区二区三区四区五区 | 成人免费在线观看视频 | av中文在线 | 久久婷婷麻豆国产91天堂 | 欧美自拍视频 | 亚洲精品自拍 | 在线观看免费福利 | 久草视频在线看 | 成人免费视频在线观看 | 在线亚州| 成人av播放 | 色av一区二区 | 日韩精品一区二区三区四区视频 | 中文字幕一区在线观看视频 | 高清国产午夜精品久久久久久 | 亚洲 欧美 另类 综合 偷拍 | 日韩激情视频一区 | 亚洲草草视频 | 国产精品毛片 | 在线播放中文字幕 | 在线观看免费毛片 | 美女视频网站久久 | 久久天天综合 | 久久久www成人免费无遮挡大片 | 99在线视频观看 | 国产一区二区三区精品久久久 | 欧美成年人 | 国产在线91| 丁香综合 | 国内精品久久影院 | 久久久久国产精品一区三寸 |