正在阅读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
所以,我很困惑。我没想到会出现这种情况。
答案 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}}