对象属性的遍历方法(最全)

本文详细介绍了ES6中五种遍历对象属性的方法:for...in、Object.keys()、Object.getOwnPropertyNames()、Object.getOwnPropertySymbols()和Reflect.ownKeys()。每种方法的适用场景和特性都进行了说明,例如for...in能遍历到继承的可枚举属性,但无法获取symbol值;Object.keys()只返回可枚举属性;Object.getOwnPropertyNames()获取所有非symbol属性;Object.getOwnPropertySymbols()获取所有symbol属性;而Reflect.ownKeys()则能获取所有属性,包括不可枚举和symbol。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

es6共有5种方法来实现对对象属性的遍历访问

1.for … in

for in 只能遍历到自身的属性 和 自身继承的可枚举的属性 的值和方法 , 不能得到symbol 的值

// for in 只能遍历到自身的属性 和 自身继承的属性 的值和方法 , 不能得到
// symbol 的值
	let s = Symbol()
		let fObj = {
		name:'孙坚',
		age:36,
		profession:'chief',
		getName(){
			return this.name
		},
		[s]:'江东'
		}


		let cObj = Object.create(fObj) // fObj是cObj的原型
			cObj.name = '孙策'
			cObj.age = 18
			console.log(cObj)

			for(let key in cObj){
				console.log(key)
			}

在这里插入图片描述
可以看到得到的结果中没有symbol值,有继承的对象的值

2.Object.keys()

该方法返回的是一个数组 , 他只能访问到自身的可枚举的属性值,不含symbol

let s = Symbol()
		let fObj = {
		name:'孙坚',
		age:36,
		profession:'chief',
		getName(){
			return this.name
		},
		[s]:'江东'
	}
		let cObj = Object.create(fObj)
		cObj.name = '孙策'
		cObj.age = 18
		Object.defineProperty(cObj,'wife',{
			value:'大乔',
			enumerable:false
		})
		//在这里定义了一个不可枚举的属性 wife
		console.log(Object.keys(cObj))
		console.log(Object.values(cObj))
		console.log(Object.entries(cObj))
		console.log(cObj)
		//这三个方法是相对应的 第一个返回键名  第二个返回键值 
		//第三个返回 一组数组

返回结果如下
在这里插入图片描述

3.Object.getOwnPropertyNames()

该方法返回的是一个数组 可以访问到除symbol以外的所有的(自身的)的属性

let s = Symbol()
			 let fObj = {
				name:'孙坚',
				age:36,
				profession:'chief',
				getName(){
					return this.name
				},
				[s]:'江东'
			 }

			 let c = Symbol()
			 let cObj = Object.create(fObj)
			 cObj.name = '孙策'
			 cObj.age = 18
			 Object.defineProperty(cObj,'wife',{
				 value:'大乔',
				 enumerable:false
			 })
			 cObj[c] = '14郡'


			 console.log(Object.getOwnPropertyNames(cObj))
			 console.log('cObj',cObj)

结果如下: 在cObj对象里定义了一个symbol的属性,没有访问到symbol的值
在这里插入图片描述

4.Object.getOwnPropertySymbols()方法
该方法可以遍历到所有的自身的symbol

	let s = Symbol('s')
			 let fObj = {
				name:'孙坚',
				age:36,
				profession:'chief',
				getName(){
					return this.name
				},
				[s]:'江东'
			 }

			 let c = Symbol('c')
			 let cObj = Object.create(fObj)
			 cObj.name = '孙策'
			 cObj.age = 18
			 cObj[c] = '14郡'
			 Object.defineProperty(cObj,'wife',{
				 value:'大乔',
				 enumerable:false
			 })
			 console.log(Object.getOwnPropertySymbols(cObj))
			 console.log('cObj',cObj)

返回结果如下 他只访问到了自身的symbol(‘c’),没有访问到继承的对象的值
在这里插入图片描述
5.Reflect.ownKeys()
返回一个数组,可以返回 自身的 所有的不管是不是可枚举的,也不管是不是symbol的,都可以遍历得到

let s = Symbol('s')
			 let fObj = {
				name:'孙坚',
				age:36,
				profession:'chief',
				getName(){
					return this.name
				},
				[s]:'江东'
			 }

			 let c = Symbol('c')
			 let cObj = Object.create(fObj)
			 cObj.name = '孙策'
			 cObj.age = 18
			 cObj[c] = '14郡'
			 Object.defineProperty(cObj,'wife',{
				 value:'大乔',
				 enumerable:false
			 })
			 console.log(Reflect.ownKeys(cObj))
			 console.log('cObj',cObj)

返回结果如下
在这里插入图片描述
新手一个,如有错误,欢迎指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值