究竟哪些是可以用Object.keys的

发布时间:2019-01-03 作者:一点通


在执行Object.keys(obj)的时候,不是所有类型的obj都能被正确执行并返回自身可枚举属性组成的数组。那么究竟哪些可以用哪些不可以呢?

判断依据就是,执行Object.keys(obj)的第一步就是将该参数转换成Object类型的对象, 然后再看该对象能不能被枚举

接下来我们可以一个一个试一下ECMAScript标准定义的7种数据类型。

Object、Boolean、Null、Undefined、Number、String、Symbol

Object

Object.keys({name: "tom", age: 12})

返回["name", "age"]

Object.keys([1, 2, 3])

返回["0", "1", "2"]

Boolean

Object.keys(true)

返回[],因为new Boolean(true)没有可枚举的属性

Null

Object.keys(null)

抛出异常

VM645:1 Uncaught TypeError: Cannot convert undefined or null to object

从侧面印证了将参数转换成object这一步确实是存在的

Undefined

同上

Number

Object.keys(100)

返回[],因为new Number(100)没有可枚举的属性

String

Object.keys("hello")

返回["0", "1", "2", "3", "4"],因为new String("hello")会返回类似下面的可枚举属性列表

0: "h"
1: "e"
2: "l"
3: "l"
4: "o"

Symbol

Object.keys(Symbol('foo'))

返回[],因为Object(Symbol('foo'))没有可枚举的属性