遍历对象属性_细说JS遍历对象属性的N种方法

d1fe76603e807bacbc596a3f42862d4a.png
本人详细介绍了JS遍历对象N种方法,欢迎关注收藏。

遍历对象属性有五种方法,下图为一个场景对比图。

2292964615d4ec5609a6e4f8bd7d5400.png

可以注意到两点:

  1. 只有for ... in 才可以遍历原型链属性,且只能遍历可枚举属性。
  2. Object.getOwnPropertyNames + Object.getOwnPropertySymbols = Reflect.ownKeys.

以上五种方法,用如下代码来做例子:

let obj = {enum_prop: "enum_val",[Symbol("symbol")]: "symbol"
};Object.defineProperty(obj, 
"no_enum_prop", 
{value: "no_enum_val", enumerable: false});Object.getPrototypeOf(obj).proto_enum_prop = "proto_enum_prop";

Object.keys

返回一个数组,包含对象自身所有enumerable属性(不含Symbol属性)的键名。

console.log(Object.keys(obj));
// 输出:["enum_prop"]

类似的其他两个函数为Object.values() 和Object.entries()。

console.log(Object.values(obj));
// 输出:["enum_val"]
console.log(Object.entries(obj));
// 输出:[[enum_prop: "enum_val"]]

for ... in

循环遍历对象自身和prototype的可枚举属性(不含Symbol属性)

for(let prop in obj){console.log(prop);
}
// 输出: enum_prop proto_enum_prop

Object.getOwnPropertyNames(obj)

返回一个数组,包含对象自身所有可枚举和不可枚举属性的(不含Symbol属性)的键名

console.log(Object.getOwnPropertyNames(obj));
// 输出:["enum_prop", "no_enum_prop"]

Object.getOwnPropertySymbols(obj)

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

console.log(Object.getOwnPropertySymbols(obj));
// 输出:[Symbol(symbol)]

Reflect.ownKeys(obj)

返回数组,包含对象自身可枚举属性、不可枚举属性和Symbol属性。

console.log(Reflect.ownKeys(obj));
// 输出:["enum_prop", "no_enum_prop", Symbol(symbol)]

对象属性的顺序

对于对象属性的顺序,经常看到的说法是:ES5 没有制定,ES6按照如下方式:

  1. 值为整形的按照升序排序。
  2. 普通字符串的按照插入顺序。
  3. Symbol按照插入顺序。

但是,以下是我从MDN上找到:

for ... in: 返回的属性顺序是不确定的。以下来自MDN文档:

7bdd8ce7302d90875a67249a74a9f37c.png

Object.keys(obj):返回顺序与for ... in 相同。以下来自MDN文档:

79b024c33d5817410279afbf6b89075c.png

Object.getOwnPropertyNames(obj):返回顺序中可枚举属性和 for ...in相同,不可枚举属性的顺序没有定义,参见:

53e6ecb017e48e038fdd26fc7ae4279d.png

Object.getOwnPropertySymbols和Reflect.ownKeys,MDN文档没有说明顺序。

总结来说:避免依赖对象属性的顺序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机考试减法公式,Excel减法函数公式

根据网友提出的“错位减法的Excel减法公式”等问题,Excel办公网整理了一些著名网站上关于“错位减法的Excel减法公式”的信息标题: 求等比数列前n项之和的方法(数学)公式法和位错减法最好有一个例子参考文献: 常用方法包括:一. 公式法: 采用等差数列和等比数列求和的…

计算机系统账户被锁定,帐号已经被系统锁定是什么意思

2007-10-09我的帐号锁定了,我已经把那个解锁的资料用邮件发去去了,怎么不回呀,不是说24小时吗尊敬的客户:您好!5173客户服务010很高兴为您服务!请您查看下您的邮件是否已经成功提交,您的信息有没有填写齐全…

计算机模拟量与数字量的转换,在S7-1200 CPU中,如何实现模拟量数值与工程量数值之间的转换?...

在S7-1200 CPU中,如何实现模拟量数值与工程量数值之间的转换?本例程中的程序使用类似于STEP7 中提供的FC105/106.用户可以使用它们将模拟量输入/输出的整数数值与工程量单位之间进行转换。用户需要将此例程安装到程序库中。步骤1:在西门子网站…

计算机硬盘坏道有什么特点,硬盘坏道对电脑会造成什么影响

现在很多人还不知道什么是硬盘坏道,导致很多人不去重视。那今天来了解下什么是硬盘坏道,对电脑有什么影响!前方高能,请系好安全带!影响一:硬盘坏道后,常见的就是打开、运行或者拷贝某个文件时会出现卡顿,操…

金坛区实验幼儿园服务器不稳定,2019年金坛城区部分公办幼儿园服务区划分方案(试行)...

原标题:2019年金坛城区部分公办幼儿园服务区划分方案(试行)2019年金坛城区部分公办幼儿园服务区划分方案(试行)为认真贯彻省、市、区第二期学前教育五年行动计划中关于试行幼儿园服务区制度的文件精神,满足适龄儿童相对就近入园需求,促进区域…

mui ajax 文件上传,MUI的图片上传和压缩

MUI的上传图片目前知道有两种方式,一种见前面文章中关于图片裁切时使用的base64作为字符串上传,另外一种则是本篇章中所使用的plus.uploader方式,它是一种真正意义上的文件上传,我们可以使用commons- fileupload组件来实现一个文件…

mysql的搜索效率_Mysql模糊查询like效率,以及更高效的写法

在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来。这个时候查询的效…

服务器winsxs文件夹怎么清理工具,winsxs,教您winsxs文件夹清理方法

小伙伴们,小编今天给你带来了一个非常劲爆的消息,那就是如何清理winsxs文件夹这问题的解决方法,说到这里你们一定都特别的想要知道清理winsxs文件夹到的方法了吧。那么小编今天就把清理winsxs文件夹的方法来分享给你们。最近不少的小伙伴都发…

mysql 事物 锁行 测试_MySQL Transaction--RR事务隔离级别下加锁测试

按照非索引列更新在可重复读的事务隔离级别下,在非索引列上进行更新和删除会对所有数据行进行加锁,阻止其他会话对边进行任何数据的增删改操作。如果更新或删除条件为c34且c3列上没有索引则:1、不允许其他会话插入任意记录,因为所…

修复mysql的view_MYSQL数据损坏修复方法

1、myisamchk使用 myisamchk 必须暂时停止 MySQL 服务器。例如,我们要检修 discuz 数据库。执行以下操作:# service mysql stop (停止 MySQL );# myisamchk -r /数据库文件的绝对路径/*MYI# service mysql startmyisamchk 会自动检查并修复数…

centos7mysql语句创建表格_CentOS7中安装MySQL(简便)及 网站的搭建

一、首先,我们需要配置CentOS7中网络环境的搭建,物理机IP为192.168.100.39,虚拟机IP为192.168.100.139,网络模式设置为桥接模式,再进入系统挂载光盘、输入命令 cd /yum.repos.d 修改yum源配置文件,接下…

mysql系列_Mysql系列(三)—— Mysql字符集和比较规则

一、前言字符集表示的是存储的二进制与字符如何映射的关系,比较规则指的是字符如何排序的规则,比如字符如果使用order by到底按什么规则进行排序。二、查看命令查看支持的字符集命令是:SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式],CHARA…

复数卷积 tensorflow_PyTorch 中的傅里叶卷积

欢迎关注 “小白玩转Python”,发现更多 “有趣”注意: 在这个 Github repo 中提供了1D、2D 和3D Fourier 卷积的完整方法。我还提供了 PyTorch 模块,可以方便地将傅里叶卷积添加到可训练模型中。链接如下:https://github.com/fkodom/fft-conv…

python time智能等待_Python Selenium智能等待

前言在使用python selenium进行自动化测试实践的过程中,经常会遇到元素定位不到,弹出框定位不到等等各种定位不到的情况,在大多数的情况下,无非是以下两种情况:1、有frame存在,定位前,未switch到…

go语言mysql删除记录_MySQL数据库删除操作-Go语言中文社区

删除数据库DROP DATABASE [IF EXISTS] 数据库名;例如:删除school数据库IF EXISTS 为可选,判断是否存在,如果不存在则会抛出异常删除数据表DROP TABLE [IF EXISTS] 表名;例如:删除student表注意:删除具有主外键关系的表…

java中的位移运算符_java中的移位运算符(, , )

java中有3种移位运算符<>> : 右移运算符&#xff0c;不改变符号位&#xff0c;num >> n 表示二进制右移n位&#xff0c;结果相当于 num / (2的n次方)>>> : 无符号右移&#xff0c;长度扩展为4字节&#xff0c;最高位都为0&#xff0c;但正数扩展位补…

现代软件工程系列 软件 = 程序 + 软件工程

软件随想: 软件 程序 软件工程 最近和几个同道谈论了一些程序&#xff0c;架构&#xff0c;软件的问题&#xff0c;大家身在此山中&#xff0c;绕来绕去&#xff0c;始终没有能有明确清晰的结论。我把一些想法写在这里&#xff0c;供专家指正。 几乎所有程序员都知道“程序…

现代软件工程系列 学生和老师都不容易

老师的难处 - V2.0 的困难 有笑话说某人请客, 客人无论是坐轿或是步行前来, 主人都能奉承一番。 有客人说自己是爬着来的&#xff0c; 主人奉承说 - 稳妥之至! 据说有些学校的有些课还是沿用 N 年前的教案和教材, 这当然稳妥之至。我看到学校用很多年前的稳妥教材把学生…

现代软件工程系列 学生的精彩文章 (1)

讲了很多课, 碰到了很多学生, 他们教给我不少东西, 下面是一些我印象中的精彩文章: http://teamkingofcsharp.spaces.live.com/blog/cns!59FC2D3DD66822AA!188.entry December 26“大教堂”与“市集” 软件项目的管理者总是无比艳羡传统行业&#xff0c;无论是工业的流水线还是…

jpa mysql存储过程_(原)springbootjpa调用服务器mysql数据库的存储过程方法-Go语言中文社区...

一、springboot jpa项目文件配置#----------------------------------------------------------###########################################################datasource 配置MYSQL数据源&#xff1b;########################################################## 数据库sprin…