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

死磕JS:Reflect.ownKeys() 和 Object.keys() 怎么選?

開發(fā) 前端
今天在寫一段深拷貝的代碼中,思考一個(gè)問題:如何遍歷 JavaScript 中 Object 的 Keys ,碰到了 Reflect.ownKeys(obj)和 Object.keys(obj) 這兩個(gè)方法,他倆究竟有什么不同?

[[384915]]

本文轉(zhuǎn)載自微信公眾號「前端思維框架」,作者水墨寒。轉(zhuǎn)載本文請聯(lián)系前端思維框架公眾號。  

今天在寫一段深拷貝的代碼中,思考一個(gè)問題:如何遍歷 JavaScript 中 Object 的 Keys ,碰到了 Reflect.ownKeys(obj)和 Object.keys(obj) 這兩個(gè)方法,他倆究竟有什么不同?

我們先看一個(gè)例子:

  1. const obj = {a: 5, b: 5}; 
  2. console.log(Reflect.ownKeys(obj)); 
  3. console.log(Object.keys(obj)); 
  4.  
  5. // Result 
  6. // ['a''b'
  7. // ['a''b'

貌似也沒什么不一樣,去翻兩個(gè)方法的文檔得知:

Object.keys(obj) 返回結(jié)果是:一個(gè)由給定對象的自身可枚舉屬性組成的數(shù)組,數(shù)組中屬性名的排列順序和正常循環(huán)遍歷該對象時(shí)返回的順序一致 。

而 Reflect.ownKeys(obj)的返回結(jié)果 等價(jià)于:

  1. Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)) 

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

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

Reflect.ownKeys(obj) 等于把 給定的對象所有屬性以數(shù)組的方式返回。

我們通過下面代碼來看兩者差別:

  1. var testObject = {[Symbol('1')]: 1, a: 2}; 
  2. Object.defineProperty(testObject, 'myMethod', { 
  3.     value: function () { 
  4.         alert("Non enumerable property"); 
  5.     }, 
  6.     enumerable: false 
  7. }); 
  8. console.log(Object.keys(testObject)); 
  9. // ['a'
  10. console.log(Reflect.ownKeys(testObject)); 
  11. // [ 'a''myMethod', Symbol(1) ] 

總結(jié)

Object.keys(obj) : 結(jié)果是object 上所有可枚舉的key;

Reflect.ownKeys(obj) : 結(jié)果是所有的 key。

 

責(zé)任編輯:武曉燕 來源: 前端思維框架
相關(guān)推薦

2017-02-06 07:34:26

JavaScrip

2021-03-06 09:18:51

JS閉包函數(shù)

2021-03-01 08:02:55

算法排序操作

2022-05-13 09:05:37

JSObject無序

2021-04-02 07:53:35

js前端手寫題

2021-06-03 08:32:18

JVM調(diào)優(yōu)虛擬機(jī)

2012-12-27 11:11:54

華為任正非

2021-02-25 07:21:00

JVMJavaava虛擬機(jī)

2023-12-14 07:36:16

Java并發(fā)原子類

2022-04-14 09:35:03

Vue.js設(shè)計(jì)Reflect

2022-04-19 21:05:03

JavaScript內(nèi)置工具

2013-06-05 09:38:27

Intel功耗酷睿

2021-06-01 09:29:43

ArthasJVM內(nèi)存

2021-11-05 06:57:49

數(shù)組對象遍歷器

2017-02-27 10:43:07

Javasynchronize

2021-05-25 09:56:42

Jvm類加載機(jī)制Java

2015-04-03 09:23:00

Google for Office 365云工具

2021-02-28 11:58:33

JVM機(jī)制語言

2019-10-10 11:50:38

Java線程開發(fā)

2022-11-07 11:37:27

深拷貝淺拷貝底層
點(diǎn)贊
收藏

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