博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript--Object遍历
阅读量:6578 次
发布时间:2019-06-24

本文共 1152 字,大约阅读时间需要 3 分钟。

hot3.png

属性的可枚举性和遍历

对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为。Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象。

{    value: 123,    writable: true,    enumerable: true,    configurable: true  }

描述对象的enumerable属性,称为”可枚举性“,如果该属性为false,就表示某些操作会忽略当前属性。

目前,有四个操作会忽略enumerablefalse的属性。

  • for...in循环:只遍历对象自身的和继承的可枚举的属性。
  • Object.keys():返回对象自身的所有可枚举的属性的键名。
  • JSON.stringify():只串行化对象自身的可枚举的属性。
  • Object.assign(): 忽略enumerablefalse的属性,只拷贝对象自身的可枚举的属性。

其中,只有for...in会返回继承的属性,其他三个方法都会忽略继承的属性,只处理对象自身的属性。

操作中引入继承的属性会让问题复杂化,大多数时候,我们只关心对象自身的属性。所以,尽量不要用for...in循环,而用Object.keys()代替。

 

属性的遍历

ES6 一共有 5 种方法可以遍历对象的属性。

(1)for...in

for...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。

(2)Object.keys(obj)

Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。

(3)Object.getOwnPropertyNames(obj)

Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。

(4)Object.getOwnPropertySymbols(obj)

Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。

(5)Reflect.ownKeys(obj)

Reflect.ownKeys返回一个数组,包含对象自身的所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。

以上的 5 种方法遍历对象的键名,都遵守同样的属性遍历的次序规则。

  • 首先遍历所有数值键,按照数值升序排列。
  • 其次遍历所有字符串键,按照加入时间升序排列。
  • 最后遍历所有 Symbol 键,按照加入时间升序排列。

 

转载于:https://my.oschina.net/u/3412211/blog/1605281

你可能感兴趣的文章
开源大数据周刊-第27期
查看>>
Bean自动装配
查看>>
【Spark Summit EU 2016】规模不断扩展的服务器集群上Spark的性能表征
查看>>
多方位拓展之路:监控平台MongoDB实践
查看>>
【百科】走近飞天:盘古——存储管理服务
查看>>
Ajax File Upload Response Handling
查看>>
mybatis学习笔记之学习目录(1)
查看>>
SQL Server · 特性介绍 · 聚集列存储索引
查看>>
C++游戏系列2:角色装备武器
查看>>
iOS逆向工程之Theos
查看>>
MySQL 存储过程
查看>>
TCP ,UDP概念和TCP三次握手连接 的知识点总结
查看>>
实战网络扫描仪应用
查看>>
Dart的日期时间操作
查看>>
让表格相邻行的颜色不同
查看>>
ugg
查看>>
Comparison method violates its general contract
查看>>
将WINDOWS系统目录写入TXT文件
查看>>
新浪微博OAuth详解以Python为例
查看>>
redis的安装
查看>>