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)
返回结果如下
新手一个,如有错误,欢迎指正