我的编程空间,编程开发者的网络收藏夹
学习永远不晚

javascript遍历对象的五种方式实例代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

javascript遍历对象的五种方式实例代码

准备

先来准备一个测试对象obj。

代码清单1


var notEnum = Symbol("继承不可枚举symbol");
var proto = {
    [Symbol("继承可枚举symbol")]: "继承可枚举symbol",
    name: "继承可枚举属性"
};
// 不可枚举属性
Object.defineProperty(proto, "age", {
    value: "继承不可枚举属性"
});
// 不可枚举symbol属性
Object.defineProperty(proto, notEnum, {
    value: "继承不可枚举symbol"
});

var obj = {
    job1: "自有可枚举属性1",
    job2: "自有可枚举属性2",
    [Symbol("自有可枚举symbol")]: "自有可枚举symbol"
};
// 继承
Object.setPrototypeOf(obj, proto);
// 不可枚举属性
Object.defineProperty(obj, "address", {
    value: "自有不可枚举属性"
});
// 不可枚举symbol属性
var ownNotEnum = Symbol("自有不可枚举symbol");
Object.defineProperty(obj, ownNotEnum, {
    value: "自有不可枚举symbol"
});

五种武器

for…in

这个是对象遍历界的老兵了,通过这种方式可以遍历对象自身及继承的所有可枚举属性(不包括Symbol类型)。

代码清单2


for(var attr in obj){
    console.log(attr,"==",obj[attr]);
}

Object.keys

获取对象自身所有可枚举属性(不包括Symbol类型)组成的数组

代码清单3


Object.keys(obj).map((attr)=>{
    console.log(attr,"==",obj[attr]);
});

Object.getOwnPropertyNames

获取对象自身所有类型为非Symbol的属性名称(包括不可枚举)组成的数组

代码清单4


Object.getOwnPropertyNames(obj).map((attr)=>{
    console.log(attr,"==",obj[attr]);
});

Object.getOwnPropertySymbols

获取对象自身所有类型为Symbol的属性名称(包括不可枚举)组成的数组

代码清单5


Object.getOwnPropertySymbols(obj).map((attr)=>{
    console.log(attr,"==",obj[attr]);
});

Reflect.ownKeys

获取一个对象的自身的所有(包括不可枚举的和Symbol类型)的属性名称组成的数组

代码清单6


Reflect.ownKeys(obj).map((attr)=>{
    console.log(attr,"==",obj[attr]);
});

总结

武器库的说明书,根据需要选择合适的武器吧。

api 操作 自身属性 不可枚举属性 继承属性 Symbol属性
for…in 遍历 yes no yes no
Object.keys 返回属性数组 yes no no no
Object.getOwnPropertyNames 返回非Symbol属性数组 yes yes no no
Object.getOwnPropertySymbols 返回Symbol属性数组 yes yes no yes
Reflect.ownKeys 返回属性数组 yes yes no yes

五种武器里最牛的就是Reflect.ownKeys了,无论Symbol还是不可枚举通吃, 简直就是Object.getOwnPropertyNames和Object.getOwnPropertySymbols合体的效果。

扩展

Object.values

获取对象自身所有可枚举属性(不包括Symbol类型)的值组成的数组

代码清单7


Object.values(obj).map((val)=>{
    console.log(val);
});

Object.entries

获取对象自身所有可枚举属性(不包括Symbol类型)的键值对数组

代码清单7


Object.entries(obj).map((val)=>{
    console.log(val);
});

hasOwnProperty

检测一个对象自身属性中是否含有指定的属性,返回boolean

引用自MDN: JavaScript 并没有保护 hasOwnProperty 属性名,因此某个对象是有可能存在使用这个属性名的属性,所以直接使用原型链上的 hasOwnProperty 方法

代码清单8


for(var attr in obj){
    if(Object.prototype.hasOwnProperty.call(obj,attr)){
        console.log("自有属性::",attr);
    }else{
        console.log("继承属性::",attr);
    }
}

propertyIsEnumerable

检测一个属性在指定的对象中是否可枚举,返回boolean

代码清单9


Reflect.ownKeys(obj).map((attr) => {
    if (Object.prototype.propertyIsEnumerable.call(obj, attr)) {
        console.log("可枚举属性::", attr);
    } else {
        console.log("不可枚举属性::", attr);
    }
});

参考

MDN Object

总结

到此这篇关于javascript遍历对象的五种方式的文章就介绍到这了,更多相关javascript遍历对象内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

javascript遍历对象的五种方式实例代码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript遍历对象的七种方法汇总

这篇文章主要介绍了JavaScript遍历对象的七种方法汇总,文章通过从属性可枚举性问题与遍历方法两个大方面讲述全文,具有一定的参考价值,需要的朋友可以参考一下
2022-11-13

Map集合的四种遍历方式代码示例

很久以前写的代码,和上一个做比较吧!便于以后查看。import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class TestMap {
2023-05-30

Java遍历Map的5种方式实例

Map作为Java中的一种集合,以键值对的形式存放一批数据,经常会被我们应用在项目中,下面这篇文章主要给大家介绍了关于Java遍历Map的5种方式,需要的朋友可以参考下
2023-02-09

list的4种遍历方式(实例讲解)

废话不多说,直接上代码:import java.util.ArrayList;import java.util.Iterator;import java.util.List;import com.hbut.domain.Person;pub
2023-05-31

python遍历可迭代对象的实现方法

本文主要介绍了python遍历可迭代对象的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-28

图解二叉树的三种遍历方式及java实现代码

二叉树(binary tree)是一颗树,其中每个节点都不能有多于两个的儿子。1.二叉树节点作为图的特殊形式,二叉树的基本组成单元是节点与边;作为数据结构,其基本的组成实体是二叉树节点(binary tree node),而边则对应于节点之
2023-05-31

调试JavaScript代码如何以表格的方式打印对象

这篇文章主要介绍调试JavaScript代码如何以表格的方式打印对象,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!以表格的方式打印对象下面是一个对象,可以通过 console.table( obj ) 来打印这个对象
2023-06-27

Java中遍历集合的并发修改异常解决方案实例代码

当你遍历集合的同时,又往集合中添加或者删除元素,就可能报并发修改异常,下面这篇文章主要给大家介绍了关于Java中遍历集合的并发修改异常解决方案的相关资料,需要的朋友可以参考下
2022-12-14

Java 从网上下载文件的几种方式实例代码详解

废话不多说了,直接给大家贴代码了,具体代码如下所示;package com.github.pandafang.tool;import java.io.BufferedOutputStream;import java.io.File;impo
2023-05-31

Java实现支付对接常用加密方式的示例代码

这篇文章主要为大家详细介绍了Java如何实现支付对接时常用加密方式,文中的示例代码讲解详细,对我们学习Java有一点帮助,需要的可以参考一下
2023-02-09

编程热搜

目录