我正在用Python编写JavaScript解释器,我必须了解内部。考虑一下这段代码(在V8上测试):
Object.prototype.toString(new Number(5)) //gives "[object Object]"
根据specification of Number constructor:
"新构造的对象的[[Class]]内部属性设置为" Number"。"
Object.prototype.toString返回以下组合:
"[object ", class, and "]" // where class is the value of [Class]] internal property of O.
为什么返回的值为"[object Object]"
而不是"[object Number]"
?这是V8中的错误还是我的理解错了?
答案 0 :(得分:2)
toString
没有参与 - 它是对象上的方法。所以,如果你打电话
Object.prototype.toString.call(new Number(5))
(因此将Number实例作为this
传递),您将获得预期结果:[object Number]
。
使用参数调用SomeClass.prototype.toString
时会得到类似的虚假结果,例如Number.prototype.toString(new Number(5))
会给'0'
。
我在节点上测试了所有这些(使用v8)。