【问题标题】:JavaScript: Object.prototype.toString(new Number(5)) seems to return a wrong typeJavaScript:Object.prototype.toString(new Number(5)) 似乎返回了错误的类型
【发布时间】:2014-11-19 17:34:13
【问题描述】:

我正在用 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的bug还是我的理解有误?

【问题讨论】:

  • toString 不带参数,你是不是要这么做Object.prototype.toString.call(new Number)

标签: javascript internal


【解决方案1】:

toString 不带参数——它是对象的方法。所以如果你打电话 Object.prototype.toString.call(new Number(5))(因此将 Number 实例传递为 this)你会得到预期的结果:[object Number]

当使用参数调用SomeClass.prototype.toString 时,您会得到类似的虚假结果,例如Number.prototype.toString(new Number(5)) 将给出'0'

我在节点(使用 v8)上测试了所有这些。

【讨论】:

  • 哦,当然很抱歉,我花了一个小时试图弄清楚我的理解有什么问题,结果只是一个粗心的错误。
  • 发生在我们最好的人身上:-)
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 2011-04-12
  • 2018-08-22
  • 2019-09-06
  • 2012-07-12
  • 2020-06-30
  • 1970-01-01
  • 2014-04-04
相关资源
最近更新 更多