我在 javascript 调试会话中看到以下行为:
o // function (a1, a2, a3) { return a1 + a2 + a3; }
typeof(o) //'function'
for (var n in o) { console.log(n); } //<a list of properties>
Object.keys(o) //TypeError: not an object
Object.prototype.toString.call(o); //"[object Function]"
这让我想知道 - 函数可以不是对象吗?
[在 Chrome 29 上运行,在 Mac 上]
请注意,这是在一个非常复杂的调试会话的中间。我不完全知道'o'来自哪里,或者它是如何创建的。此外,到目前为止,我还无法通过简单的测试用例重现此问题。一个简单的设置按预期工作:
var t = function() { return true; } //undefined
t.a = "aa" //"aa"
Object.keys(t) //["a"]