有一回面试碰到了将一个arr = [[[2, 3]]]调用toString()方法,正确答案是“2,3”,该方法是array原型下的方法。
我们可能会看到有2个使用方式,一个Object.prototype.toString(),一个toString()。其实,toString()方法是前者重写后的方法。如:
var obj = new Object()
obj.toString() // [object object]
Object原型下有一个toString()方法,该方法通过一个call()方法将参数绑定到具体的对象,如:
Object.prototype.toString.call(1)
在该方法中,本来1是一个数字类型对象,应该继承Object下边的方法,但实际是,使用call()改变了对象下toString()方法的继承对象,返回的结果是[object, Number]
再测试下数组:
所以,数组也重写了Object下的toString()方法。
1、Object.prototype.toString()
2、Array.prototype.toString()
对数组对象,该方法返回一个字符串,对数组内的每个元素调用toString()方法,并使用join()方法进行连接。对于多维数组,会对内部数组也调用该方法
当数组与字符串进行连接操作时,会自动调用toString()方法
3、Number.prototype.toString()
上述方法返回的结果是0,不能直接使用1.toString()的方式,因为js会把1后边的点当成是小数点,报错。
使用场景:
可以用来判断数据类型,可以将数字转换成进制形式的数字。
我们知道,js有null,undefined,boolean,number.array,object.function数据类型,而typeof只能区分出来基本类型,也就是undefined,boolean,number,string,object这5个基本数据类型,当想要区分null,array,function,object的时候,就没法区分了。这个时候
Object.prototype.toString.call()方法就发挥作用了。话不多说,上代码:
甚至!它还可以判断date,正则!