obj.toString()方法是用来干什么的
每一个对象都有一个toString()方法,默认情况下toString()被每一个Object对象继承,如果此方法未被重写,toString()返回"[object type]",其中的type是对象的类型。
let obj = new Object()
obj.toString() // "[object Object]"
MDN上是这么写的,toString()方法用久了转字符串,都没好好看过概念,习惯性以为只是返回一个字符串。比如:
let num = 123
let fun = function(){}
let arr = [1, 2, 3]
num.toString() // "123"
fun.toString() // "function(){}"
arr.toString() // "1,2,3"
这里并没有得到对象类型,是因为toString()方法为Object的原型方法,而Array, Function, Number等作为Object的实例,都重写了toString方法,
不同的类型的对象调用toString方法时,会根据原型链往上找,找到的都是重写后的toString()方法,如果我们删除重写后的toString()方法后,
执行arr.toString()方法就能调用Object原型上的toString()方法
delete Array.prototype.toString
arr.toString() // "[object Array]"
也就是说如果对象的toString()方法未被重写,就可以拿到数据类型,但是大部分时候toString()方法都是被重写的,
这时,就需要call()或者apply()来直接调用Object.prototype.toString()