js对象遍历方法合集

js对象遍历方法合集js 遍历对象的方法

一、for…in

首先我们定义一个对象,并给这个对象设置一些可枚举或不可枚举的属性,在原型上也加上一些属性。

let person = { 
    name:'pjh', [Symbol('age')]:20 } Object.defineProperties(person,{ 
    country:{ 
    enumerable:false, value:'korea' }, [Symbol('sex')]:{ 
    enumerable:true, value:'man' } }) Object.defineProperties(person.__proto__,{ 
    team:{ 
    enumerable:true, value:'wannaone' }, school:{ 
    enumerable:false, value:'zjut' }, [Symbol('time')]:{ 
    enumerable:true, value:'1' }, [Symbol('year')]:{ 
    enumerable:false, value:'1999' } }) 
for(var key in person){ 
    console.log(key) //name team } 

for…in可以遍历到自身及原型上的可枚举属性,不包含symbol属性,如果我们只想遍历自身的属性,就要加一个判断。

 for(var key in person){ 
    if(Object.prototype.hasOwnProperty.call(person,key)){ 
    console.log(key) //name } } 

二、Object.keys()

for(var key of Object.keys(person)){ 
    console.log(key) //name } 

Object.keys()只能遍历到对象自身的可枚举属性,不包括symbol属性。Vue 对 data 进行遍历响应式处理也是用这个方法。类似的还有Object.values()和Object.entires()

for(var value of Object.values(person)){ 
    console.log(value) //pjh } 
for(var [key,value] of Object.entries(person)){ 
    console.log(key + ':' +value) //name:pjh } 

es6中的Map也提供了与Object.values()和Object.entries() 等效的方法

let map = new Map(Object.entries(person)) for(var key of map.keys()){ 
    console.log(key) //name:pjh } for(var value of map.values()){ 
    console.log(key) //pjh } for(var [key,value] of map.entries()){ 
    console.log(key +':' +value) //name:pjh } 

三、Object.getOwnPropertyNames()

for(var key of Object.getOwnPropertyNames(person)){ 
    console.log(key) //name country } 

Object.getOwnPropertyNames()只能遍历到自身属性,不可枚举属性也能遍历到,不包括symbol属性。

for(var key of Object.getOwnPropertySymbols(person)){ 
    console.log(key) //Symbol(age) Symbol(sex) } 

Object.getOwnPropertySymbols()能遍历到自身的symbol属性

四、Reflect.ownKeys()

for(var key of Reflect.ownKeys(person)){ 
    console.log(key) //name country Symbol(age) Symbol(sex) } 

Reflect.ownKeys()能遍历到自身的所有属性,包括不可枚举属性和symbol属性

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178426.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午5:20
下一篇 2026年3月26日 下午5:20


相关推荐

  • 人工神经网络基本原理[通俗易懂]

    最近谷歌升级版AlphaGo打败众多国内外围棋高手,那狗又火了一把,再次引起大家的关注。作为一个对技术有追求的人,嗯,是时候好好学习当前最火的人工智能与机器学习的相关技术了。学习一项技术,仅仅了解其技术原理是远远不够的,从技术实践中建立感性认识,才能对技术原理有深入的理解。因此,本文先介绍神经网络基本原理,后面系列文章将详细介绍神经网络的成熟算法及网络结构(比如:BP神经网络、RBF、CNN等)并编程实现之。

    2022年4月16日
    106
  • deb 中标麒麟_中标麒麟linux

    deb 中标麒麟_中标麒麟linux编程语言中文网今天精心准备的是 中标麒麟 linux 下面是详解 中标麒麟 Linux 操作系统怎么安装软件 中标麒麟 Linux 是正统的 Linux 操作系统 并没有软件中心和 yum 安装源 所以你要安装软件的话一般只能安装光盘中的软件 也可以根据系统的环境找 RPM 包安装 RPM 安装操作详解 命令 rpm i 需要安装的包文件名举例如下 rpm iexample rpm 安装 example rpm

    2026年3月26日
    2
  • 从几个常见需求看扫描电子书处理软件选择「建议收藏」

    从几个常见需求看扫描电子书处理软件选择「建议收藏」作者:马健邮箱:stronghorse_mj@hotmail.com发布:2020.01.04这几天在eshuyuan碰到一些人谈到扫描电子书处理,很多人的习惯是使用通用图像处理软件,包括Phot

    2022年8月1日
    14
  • Cursor+BlenderMCP+Blender(windows系统)用AI进行3D建模教程

    Cursor+BlenderMCP+Blender(windows系统)用AI进行3D建模教程

    2026年3月16日
    3
  • JAVA设计模式之门面模式(外观模式)[通俗易懂]

    医院的例子  现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其“分而治之”,把一个系统划分为几个较小的子系统。如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。  首先病人必须先挂号,然后门诊。如果医生要求化验,病人必

    2022年3月11日
    50
  • N8n Merge 节点详解

    N8n Merge 节点详解

    2026年3月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号