js对象遍历

基础遍历

占位符占位符占位符占位符占位符占位符占位符占位符


// 大家都会的 for...in循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)
const obj = {
    a: 'ss',
    b: 'bb',
    c: 'cc',
}

for (let key in obj) {
    console.log(key, obj[key])
}

但是说个黑科技, 当你业务判断返回的对象是不是空,用什么方法呢?

const obj = {
    a: 'ss',
    b: 'bb',
    c: 'cc',
}
delete obj.a
delete obj.b
console.log(obj, JSON.stringify(obj) === '{}')
// { c: 'cc' } false
delete obj.c
console.log(obj, JSON.stringify(obj) === '{}')
// {} true

上面方式看着是LOW了点,但是确实可以用, 现在我们用个常用的方法

const obj = {
    a: 'ss',
    b: 'bb',
    c: 'cc',
}

delete obj.a
delete obj.b
console.log(obj, Object.keys(obj)) // { c: 'cc' } [ 'c' ]
delete obj.c
console.log(obj, Object.keys(obj)) // {} []

上面代码,Object.keys()遍历

返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)。

所以我们可以使用数组api了

const obj = {
    a: 'ss',
    b: 'bb',
    c: 'cc',
}
Object.keys(obj).forEach((value, index) => {
    console.log(value, index)
    // a 0
    // b 1
    // c 2
})

当然,Object.getOwnPropertyNames 也会返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性).

Reflect.ownKeys(obj) 返回一个数组,包含对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举.

你可能感兴趣的:(ECMAScript6)