为什么' abc' .toString()给出的结果与toString.call不同(' abc')?

时间:2014-05-02 15:57:02

标签: javascript

今天早上有些事情困扰着我:

'abc'.toString()返回'abc'

toString.call('abc')返回'[object String]'

为何与众不同?

2 个答案:

答案 0 :(得分:4)

这是因为当你将原始字符串传递给call()时,它会被装入一个对象:

文件说(强调我的):

  

请注意,这可能不是该方法看到的实际值:如果是   method是非严格模式代码中的函数,nullundefined会   被全局对象替换,和原始值将被替换   盒装

答案 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 )