为何向Object.keys()传入函数对象会返回空数组?
为什么Object.keys()不返回函数对象的属性名?
首先明确:函数确实是带有属性的对象,但Object.keys()只会返回对象自身的可枚举属性,这是核心原因。
- 函数的内置属性(比如你例子里的
arguments,还有length、name这类)都是不可枚举的属性,所以不会被Object.keys()筛选出来。如果要查看函数对象的所有自身属性(无论可枚举与否),可以用Object.getOwnPropertyNames(),比如执行Object.getOwnPropertyNames(f),就能看到这些内置属性的名字了。 - 另外补充一点:现在ES规范里已经不推荐通过
f.arguments这种方式访问arguments了,正确的做法是在函数内部直接使用arguments变量。 - 你可以做个测试:给函数手动添加一个可枚举属性,比如
f.myCustomProp = 'test',这时候再执行Object.keys(f),就会返回["myCustomProp"],验证了只有可枚举的自身属性才会被返回。
内容的提问来源于stack exchange,提问作者cat
相关产品推荐
相关产品推荐

