CNode

关于toString的问题~~~~求大神指点

问答
Bberwin发布于11 年前最后回复11 年前7 回复5076 浏览0 收藏

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

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

untitled1.png

查看回复

回复 (7)

H
hezedu#1·11 年前

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

T
think2011#2·11 年前

因为this指向不一样

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

要是我说错了,请指正。

A
asfman#3·11 年前

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

Z
zhangking520#4·11 年前

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

C
cylzh#5·11 年前

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

A
Aralic#6·11 年前

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

B
berwin#7·11 年前

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

参与回复
登录后即可参与回复。登录