关于toString的问题~~~~求大神指点
发布于 9 年前 作者 berwin 4370 次浏览 最后一次编辑是 8 年前 来自 问答

为什么两种结果不一样??

Object.prototype.toString.call([]) // [object Array]
[].toString() // ''

untitled1.png

7 回复

array toString() 是join(’,’);

因为this指向不一样

第一个的this指向的是 Array 都二个指向的是String,相当于 []+’’ = ‘’

要是我说错了,请指正。

第一个调用的是Object.prototype.toString 第二个调用的是Array.prototype.toString 调用的方法不一样,结果自然不一样

楼上在理,array对象虽然继承自object ,但是它有自己的tostring方法,Object.prototype.toString 会获取this对象的[[Class]]属性的值 组成[object array]返回,Array.prototype.toString 调用时如果this对象是数组会调用自己的tostring 即join,不是数组的话,就调用Object.prototype.toString。

[].toString调用的是Array.prototype.toString,已经重写了Object.prototype.toString。

http://aralic.github.io/2015/05/01/js类型检测/ 楼主看看这个 以前我也和你一样有这个疑惑。

谢谢大家。我已经明白啦。

回到顶部