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

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

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

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

前言

我根据阮老师的《ES6标准入门》学习并总结了七种遍历对象的方法,我会将分别介绍这七种方法并进行详细的区分,并将从属性可枚举性问题与遍历方法两个大方面讲述全文,其中可枚举性是掌握遍历对象之前的的铺垫,请读者耐心学习,掌握遍历对象的七种方法!

属性的可枚举性

为什么要先说属性的可枚举性问题,因为一些方法会根据属性的可枚举型进行操作,其中遍历就是一种,遍历的一些方法会忽略掉可枚举属性值为false的属性,我知道到这里读者可能会有一些绕圈子:什么叫可枚举属性值为false的属性?下面我带大家来一探究竟

对象中的所有属性都具有一个描述对象,对你没有看错,其实在我们看到的一个普通对象中的每一个属性值都包含一对象,即描述对象,它是用来控制属性的行为

let obj = {
    name:"猪痞恶霸",
    age:20
}

比如上面声明了一个普通的对象,含有nameage属性,这两个属性都具有一个描述对象,那我们怎么能拿到这个描述对象呢?

来看看这个方法:Object.getOwnPropertyDescriptor(),它可以拿到指定对象的某属性的描述对象,所以参数有两个,一个是指定对象,一共是指定对象的某属性

Object.getOwnPropertyDescriptor(obj,"name")

如上图,我们拿到了obj对象name属性的描述对象,描述对象内就包含了我们想知道的东西,enumerable就是描述对象可枚举属性,那么在这个例子中值为true,所以就能解释上面那句看不懂的话:可枚举属性值为false的属性,在这里的解释就为:obj对象内的name属性的描述对象内的可枚举属性值为true

遍历对象

for...in

for...in可以遍历对象的所有可枚举属性,包括对象本身的和对象继承来的属性

let obj = {
    name:"ned",
    like:"man"
}
Object.defineProperty(obj, 'age', {
  value: "18",
  enumerable: false
});
for(item in obj) {
    console.log(item)
}

看一看上面的例子,我们使用Object.defineProperty的形式来设置对象的描述对象,将其可枚举属性值设为false,使用for...in遍历,其没有被打印出来

其实for...in的特性会导致一个问题,其继承的属性会被遍历到,所以当我们不想要遍历被继承的属性,那么我们就可以使用Object.keys()

Object.keys()

Object.leys()方法可以遍历到所有对象本身的可枚举属性,但是其返回值为数组

let obj = {
    name:"ned",
    like:"man"
}
Object.keys(obj) //  ['name', 'like']

到这里我们一般是使用Object.keys()来代替for...in遍历操作,除此之外,为了代替for...in,又新增了与Object.keys()配套的遍历方法,下面我们来看看

Object.values()

Object.values()Object.keys()遍历对象的特性是相同的,但是其返回的结构是以遍历的属性值构成的数组

let obj = {
    name:"cornd",
    age:10
}
Object.values(obj) // ['cornd', 10]
Object.defineProperty(obj, 'like', {
  value: "coding",
  enumerable: false
});
Object.values(obj) // ['cornd', 10] 

声明了一个对象,使用Object.values()返回对象的所有自身可枚举属性的属性值,通过设置新的属性值并将其描述对象内的enumerable设置为false,就可以看到Object.values()的特性

Object.entries()

Object.entries()的返回值为Object.values()Object.keys()的结合,也就是说它会返回一个嵌套数组,数组内包括了属性名与属性值

let obj = {
    name:"cornd",
    age:10
}
Object.entries(obj) // [['name', 'cornd'],['age', 10]]

其遍历特性与Object.values()Object.keys()相同,不再赘述。

Object.getOwnPropertyNames()

其返回结果与Object.keys()对应,但是他得特性与其相反,会返回对象得所有属性,包括了不可枚举属性

var arr = [];
console.log(Object.getOwnPropertyNames(arr)); // ['length']
Object.getOwnPropertyDescriptor(arr,"length").enumerable // false

上面我声明了一个空数组,而使用Object.getOwnPropertyNames()方法,返回了length,而length属性的enumerable正是false

Object.getOwnPropertySymbols()

Object.getOwnPropertySymbols()会返回对象内的所有Symbol属性,返回形式依旧是数组,值得注意的是,在对象初始化的时候,内部是不会包含任何Symbol属性

let obj = {
    name:"obj"
}
Object.getOwnPropertySymbols(obj) // []

所以我初始化一个对象,通过这个方法返回的是一个空数组

let sym = Symbol()
console.log(sym)
obj[sym] = "hogskin" 
Object.getOwnPropertySymbols(obj) // Symbol()

我在后面新建symbol,再为上面声明好的对象添加进去,通过遍历得到Symbol()

Reflect.ownKeys()

Reflect.ownKeys()返回的是一个大杂烩数组,即包含了对象的所有属性,无论是否可枚举还是属性是symbol,还是继承,将所有的属性返回

let arr = [0,31,2]
Reflect.ownKeys(arr) // ['0', '1', '2', 'length']

上面的例子声明了一个数组,返回的是数组下标和length属性。

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

免责声明:

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

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

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

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

下载Word文档

猜你喜欢

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

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

JavaScript中有哪些遍历对象的方法

这篇文章将为大家详细讲解有关JavaScript中有哪些遍历对象的方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点击,
2023-06-14

es6有遍历对象的方法吗

今天小编给大家分享一下es6有遍历对象的方法吗的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。有,遍历方法:1、“for...
2023-07-04

es6有没有遍历对象的方法

有。遍历方法:1、“for...in”语句,遍历对象自身的和继承的可枚举属性;2、Object.keys(),对属性名进行遍历;3、Object.getOwnPropertyNames(),对属性名进行遍历;4、Object.getOwnPropertySymbols(),遍历所有Symbol属性;5、Reflect.ownKeys(),遍历所有属性。
2022-11-22

python遍历 truple list dictionary的几种方法总结

实例如下:def TestDic1():dict2 ={'aa':222,11:222}for val in dict2:print valdef TestDic2():dict2 ={'aa':222,11:222}for (key,va
2022-06-04

编程热搜

目录