简体   繁体   English

为什么将 function object 传递给 Object.keys() 返回空数组?

[英]Why passing function object to Object.keys() returns empty array?

So, functions in js are objects with some keys, right?那么,js 中的函数就是带有一些键的对象,对吧? I'm trying to iterate through them, but i'm getting empty list:我正在尝试遍历它们,但我得到的是空列表:

function f(a) {
console.log(Object.keys(f)) //prints []
console.log(f.arguments) //key "arguments" exists and prints Arguments object
}

Any expanation why Object.keys() doesn't return keys for function object?任何解释为什么 Object.keys() 不返回 function object 的密钥?

Object.keys will only list enumerable properties. Object.keys将仅列出可枚举的属性。 The arguments property is not enumerable, as you can see if you use getOwnPropertyDescriptor . arguments属性不可枚举,您可以查看是否使用getOwnPropertyDescriptor

The property exists, but该属性存在,但

 function f() { } console.log(Object.getOwnPropertyDescriptor(f, 'arguments'));

To get a list of all own-property keys (excluding symbols), including non-enumerable ones, you can use Object.getOwnPropertyNames .要获取所有自有属性键(不包括符号)的列表,包括不可枚举的键,您可以使用Object.getOwnPropertyNames

 function f() { } console.log(Object.getOwnPropertyNames(f));

which, here, gives you在这里,给你

[
  "length",
  "name",
  "arguments",
  "caller",
  "prototype"
]

Object.keys could have returned properties if any properties put directly on the function were enumerable, such as如果直接放在 function 上的任何属性是可枚举的,则Object.keys可能已返回属性,例如

 function f() { } f.someProp = 'foo'; console.log(Object.keys(f));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM