今天早上有些事情困扰着我:
'abc'.toString()
返回'abc'
toString.call('abc')
返回'[object String]'
为何与众不同?
答案 0 :(得分:4)
这是因为当你将原始字符串传递给call()时,它会被装入一个对象:
文件说(强调我的):
请注意,这可能不是该方法看到的实际值:如果是 method是非严格模式代码中的函数,
null
和undefined
会 被全局对象替换,和原始值将被替换 盒装
答案 1 :(得分:1)
toString.call('abc')
目前您隐式使用
window.toString.call('abc')
与
相同Object.prototype.toString.call('abc')
尝试改为
String.prototype.toString.call('abc')
与
相同('abc').toString()
对于downvoters的进一步证明:
true === ( toString === window.toString === Object.prototype.toString )
true === ( 'abc'.toString === String.prototype.toString )