Object.keys()的相关问题

73 阅读1分钟

1.返回属性具有什么特性?

// 对象中具有可枚举的属性
const obj1 = {
    a: 'a',
    b: 'b',
    c: 'c'
}
Object.keys(obj1)// ['a', 'b', 'c']

// enumerable默认为false
const obj2 = Object.create({}, {
    getFoo: {
        value: () => this.foo,
        // enumerable: true
    }
})
obj2.foo = 2
Object.keys(obj2)//['foo']

2.包含继承的属性?

// 可以继承
class A {
    constructor(name) {
        this.name = name
    }
}

class B extends A {
    constructor(name, age) {
        super(name);
        this.age = age
    }
}

let dog = new B('张顺飞', 33)
Object.keys(dog)//['name', 'age']

3.返回的属性顺序是什么样的?属性中有小数和负数,返回的顺序是什么样的?

// Number:对于>=0的整数会顺序排列,对与负数和小数会当做字符串处理 按写入顺序进行排列
// String:按照先后顺序排列
// Symbol:被忽略掉,不返回
let fa = Symbol('a')
const obj3 = {
    8: '1',
    a: 'a',
    1: '2',
    b: '1',
    0: '1'
}
obj3[fa] = 'fa'
Object.keys(obj3)

4.Object.keys(null)和Object.keys(undefined)

// 将传入的变量->对象
Object.keys(null)
Object.keys(undefined)
// TypeError: Cannot convert undefined or null to object
// 都会抛出异常

5.Object.keys(123)和Object.keys('123')区别

Object.keys(123)//[]
Object.keys('123')//['0', '1', '2']