JavaScript:toString
为什么Object.prototype.toString === toString
?如果我在全局范围内有这个:
var toStringValue = toString.call("foobaz");
我希望 toStringValue
是 window.toString
的值,因为 window
是默认范围,对吧?为什么 toString
本身解析为 Object.prototype.toString
而不是 window.toString
?
How come Object.prototype.toString === toString
? If I have this in the global scope:
var toStringValue = toString.call("foobaz");
I would expect toStringValue
to be the value of window.toString
because window
is the default scope, right? How come toString
by itself resolves to Object.prototype.toString
instead of window.toString
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您将获得的结果将取决于主机环境。如果我运行这个:
...在 Chrome 上我分别得到
true
和false
;在 Firefox 上,我得到false
和false
。 IE 给出true
和false
but 见下文。浏览器上的窗口对象有点棘手,因为它是一个主机对象,如果主机对象愿意,它们可以做一些奇怪的事情。 :-) 例如,您的
toString.call("foobaz")
在 IE 上将失败,因为window
的toString
不是真正的JavaScript 函数,没有call
或apply
。 (我并不是说这样做是正确的,你明白......)The results you'll get will be dependent on the host environment. If I run this:
...on Chrome I get
true
andfalse
, respectively; on Firefox I getfalse
andfalse
. IE givestrue
andfalse
but see below.The window object on browsers is a bit tricky, because it's a host object, and host objects can do strange things if they want to. :-) For instance, your
toString.call("foobaz")
will fail on IE, because thetoString
ofwindow
is not a real JavaScript function and doesn't havecall
orapply
. (I'm not saying it's right to be that way, you understand...)