遍历对象属性_细说JS遍历对象属性的N种方法
本人详细介绍了JS遍历对象N种方法,欢迎关注收藏。
遍历对象属性有五种方法,下图为一个场景对比图。
可以注意到两点:
- 只有for ... in 才可以遍历原型链属性,且只能遍历可枚举属性。
- 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按照如下方式:
- 值为整形的按照升序排序。
- 普通字符串的按照插入顺序。
- Symbol按照插入顺序。
但是,以下是我从MDN上找到:
for ... in: 返回的属性顺序是不确定的。以下来自MDN文档:
Object.keys(obj):返回顺序与for ... in 相同。以下来自MDN文档:
Object.getOwnPropertyNames(obj):返回顺序中可枚举属性和 for ...in相同,不可枚举属性的顺序没有定义,参见:
Object.getOwnPropertySymbols和Reflect.ownKeys,MDN文档没有说明顺序。
总结来说:避免依赖对象属性的顺序。
遍历对象属性_细说JS遍历对象属性的N种方法相关推荐
- js轮播图片小圆点变化_原生js实现轮播图(两种方法)
第一种: 这个是之前写的,比较草率,没有注释,如果这个看不懂就去看第二个,比较仔细,主要是了解他,后面都会有一些插件来使用,很方便,只要几行代码就可写出各种各样的代码,所以,不懂的话,不要太在意, 第 ...
- js中当等于最小值是让代码不执行_网页中JS函数自动执行常用三种方法
本文为大家分享了在网页中JS函数自动执行常用方法,供大家参考,具体内容如下 一.JS方法 1.最简单的调用方式,直接写到html的body标签里面: 2.在JS语句调用: function myfun ...
- js刷新页面有哪几种方法
js刷新页面有哪几种方法 一.总结 一句话总结:location属性的reload方法即可:document.location.reload() 1.页面刷新有哪常见的8种方法? 1,history. ...
- html 点击事件阻止冒泡,js阻止事件冒泡的两种方法
本篇文章给大家分享的内容是关于js阻止事件冒泡的两种方法 ,有需要的朋友可以参考一下 一.冒泡事件简介 当我们点击一个控件的时候,如果包括这个控件的父控件也有click事件,则会继续执行. 方法一:e ...
- iOS: JS和Native交互的两种方法,iosjsnative交互
iOS: JS和Native交互的两种方法,iosjsnative交互 背景: UIWebView: iOS 用来展示 web 端内容的控件. 1. 核心方法: - (NSString*)string ...
- JS区分中英文字符的两种方法
JS区分中英文字符的两种方法: 正则和charCodeAt()方法. 正则无疑是最强大的判断各种条件的方法, 最近也在研习它, 虽然枯燥, 但仍有乐趣. 用它来判断一个双字节的中文字符也是轻而易举地. ...
- JS数组转字符串(3种方法) arrays.join(“-“)把数组使用-分割为字符串
JS数组转字符串(3种方法) JavaScript 允许数组与字符串之间相互转换.其中 Array 方法对象定义了 3 个方法,可以把数组转换为字符串,如表所示. Array 对象的数组与字符串相互转 ...
- js循环添加事件的两种方法
js循环添加事件的两种方法 选择下拉列表中的一个li将文本传到框中 问题:写此二级菜单时用到的方法不好,对此进行优化 原始js代码: <script>// 思路:1.点击下拉框a时,ul中 ...
- JS实现深拷贝常用的几种方法
JS实现深拷贝常用的几种方法 <!DOCTYPE html> <html lang="en"> <head><meta charset=& ...
最新文章
- git 建立一个私有模块
- Silverlight4 入门GetStart
- rocketmq之producer解析
- 3-unit1 IPv6网络的管理
- linux内核杂记(18)-内核链表结构(2)
- java + httpclient +post请求(记录下)
- O(n*m)复杂度的多重背包coinsPOJ 1742
- 驳!?使用游戏引擎是作弊行为的5个依据
- WordPress好看的QQ微信等登录插件二开美化版
- Filecoin Gas基础费率升至5.06 nanoFIL
- c语言break和return区别,C语言break,continue和return的区别
- SCI和影响因子:学术评估与商业运作——Nature实证研究
- php中的脚本加速扩展opcache
- [老老实实学WCF] 第五篇 再探通信--ClientBase
- 双缓冲技术解决java游戏图片闪现问题
- 这些初创公司为何要拒绝上亿美元的投资
- 基于SEIR模型对美国COVID-19疫情传播的预测和分析
- 百度云不限速下载(官方渠道,无风险)
- 洛谷 P1085	不高兴的津津 C语言
- 班旗怎么用软件设计,(最新整理)班旗设计大赛主持词
热门文章
- 关系数据库SQL之可编程性触发器
- android studio升级时提示 Connection failed. Please check your network connection and try again
- 设计模式系列漫谈之一 - 观察者模式
- css_01_承接部分html+css快速入门
- 4.1-大秦立国-ip演变
- linux的系统移植——交叉编译工具集
- Leetcode--5. 最长回文子串(java)
- 操作系统基本特性——并发、共享、虚拟、异步
- windows c++ 内存映射大文件问题记录
- python文件系统_你应该知道的10个Python文件系统方法