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

本文介绍了JavaScript中用于遍历和获取对象属性的不同方法,如forin、Object.getOwnPropertySymbols、Object.getOwnPropertyNames等,强调了它们在遍历类型(Symbol和非Symbol)、可枚举性以及原型链上的区别。
摘要由CSDN通过智能技术生成

方法介绍

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

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

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

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

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

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

7、forof遍历Object.entries():通过遍历Object.entries(),可以同时拿到属性名和值,特性类似Obejct.entries()

8、forof+遍历实现可迭代协议:让对象实现可迭代协议。【不推荐,因为还要往对象上加东西】



区别说明



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

1、 只有Object.getOwnPropertySymbols()能遍历自身的Symbol属性,其他Object的静态方法都只会遍历自身的非Symbol属性,只有Object.getOwnPropertyNames()不关心属性是否可以枚举

2、 只有forin会遍历自身和原型链上非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

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值