gpt4 book ai didi

javascript - javascript函数什么时候不是对象?

转载 作者:数据小太阳 更新时间:2023-10-29 06:11:59 25 4
gpt4 key购买 nike

我在 javascript 调试 session 中看到以下行为:

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 上]


请注意,这是在一个非常复杂的调试 session 中。我不完全知道“o”是从哪里来的,或者它是如何创建的。此外,到目前为止,我还无法通过简单的测试用例重现此问题。一个简单的设置按预期工作:

var t = function() { return true; } //undefined
t.a = "aa" //"aa"
Object.keys(t) //["a"]

最佳答案

当你看到这样的东西时,你可能会尝试:

console.log(Object.keys)

或等效的。

(如果你能找到你浏览器的键的原始实现,比较并确保它与你所看到的相同)

(如果看到此类问题,请阅读对问题的评论以获得更多要查看的想法)


误报。函数始终是对象,Chrome 的人知道如何制作虚拟机。

我跑了

grep -r "Object.defineProperty(" *

grep -r "Object.defineProperties(" *

并找到了一个 Object.keys 被覆盖的地方,有一个错误的函数。

相关代码是动态加载的,所以我没有看到它在浏览器中显式加载。

关于javascript - javascript函数什么时候不是对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18857500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com