为什么toString.call('my string')与'my string'.toString()不同,或者,为什么是document.toString!=='asd'。toString?

时间:2013-03-03 05:02:50

标签: javascript

正在阅读Underscore.js以了解它的is[String|Number|...]方法是如何工作的,现在我很困惑。下划线确实:

toString.call(obj) == ['object ' + name + ']';

好的,我可以做到

>>> toString.call('my string')
"[object String]"

但是

>>> 'my string'.toString()
"my string"

我迷失在这里!在第一次打电话中我得到了:

>>> document.toString === toString
true

并且

>>> document.toString === 'asd'.toString
false

所以,我很困惑。我没想到会出现这种情况。

1 个答案:

答案 0 :(得分:4)

那是因为:

document.toString === Object.prototype.toString

它实现了toString的最基本版本,类似于:

'[object ' + (typeof this) + ']';

这与String.toString()非常不同,> String.prototype.toString.call('hello world') "hello world" 只输出字符串本身,即:

Array.toString()

> Array.prototype.toString.call([1,2,3]) "1,2,3" 输出以逗号分隔的值字符串。

.call()

使用toString()

为了完成这项工作,他们基本上使用.call()对对象应用toString.call(obj)

toString

this方法中,obj现在引用Object.prototype.toString.call(obj) 。这相当于:

{{1}}