总结js中遍历对象属性的方法

发布时间:2023年12月26日

方法介绍

1、?forin循环:遍历对象自身的和原型链上的可枚举属性。

2、Object.getOwnPropertySymbols()方法:返回一个数组,包含对象自身的所有Symbol类型的属性。

3、?Object.getOwnPropertyNames()方法:返回一个数组,包含对象自身的所有属性(不包括Symbol类型的属性),无论它们是否可枚举。

4.?Object.keys()方法:返回一个数组,包含对象自身(不含原型链上的)的所有可枚举属性。

5.?Object.values()方法:返回一个数组,包含对象自身的所有可枚举属性的值。

6.?Object.entries()方法:返回一个数组,其元素是对象自身的可枚举属性键值对数组。



区别说明



这些方法的主要区别在于:

1、 forin循环会遍历对象自身的和原型链上的可枚举属性,其他方法只关注对象自身的属性。

2、Object.keys()、Object.values()、Object.entries()三姐妹
只关注对象自身的可枚举属性

3、Object.getOwnPropertyNames()和Object.getOwnPropertySymbols()会返回对象自身的所有属性,无论它们是否可枚举。

只有Object.getOwnPropertySymbols()会拿自身的symbol属性。

4、Object.keys()、Object.getOwnPropertyNames()返回的是属性名的数组,Object.values()返回的是属性值的数组,Object.entries()返回的是键值对数组,Object.getOwnPropertySymbols()返回的是Symbol类型的属性的数组。

测试代码

			let s = Symbol('symbol')
			// 先定义一个symbol属性和对象自身属性
			let obj = {
				name: '虾米',
				[s]: 'symbol属性'
			}
			// 再定义一个不可枚举的属性
			Object.defineProperty(obj, 'sex', {
				configurable: true,
				enumerable: false, //不可枚举
				writable: true,
				value: 11
			})
			// 最后在原型链上定义一个属性
			obj.__proto__.age = 12

			// forin
			for (let i in obj) {
				console.log(i, '// forin');
			}
			// Object.getOwnPropertyNames()
			console.log(Object.getOwnPropertyNames(obj), '// Object.getOwnPropertyNames');
			// Object.getOwnPropertySymbols()
			console.log(Object.getOwnPropertySymbols(obj),'// Object.getOwnPropertySymbols(obj)');
			// Object.keys()
			console.log(Object.keys(obj), '// Object.keys()');
			// Object.values()
			console.log(Object.values(obj), '// Object.values()');
			// Object.entries()
			console.log(Object.entries(obj), '// Object.entries()');

运行结果:?

?END

文章来源:https://blog.csdn.net/badbaby52906/article/details/135223562
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。