定义: 方法可把一个逻辑值转换为字符串,并返回结果。
- 正常用法
"string"
- 特殊一点的用法
const
可以转换成不同进制的字符串,但只对Number有效。
- 检测类型
Object.prototype.toString 可以检测类型
console
可以检测出很多类型,是不是很强大,但为什么呢?
先看下面
Object
每个类型下面都重写了toString方法,所以重写后的方法各不相同。
对原型链有过了解的同学知道,所有的类型,最终指向的都是Object :
Function
或者
Object
上面代码,说明什么问题?如果删除了Array原型上的toString方法,那么就会向上查找,最终查找到Object上的toString方法,并且调用,而Object上的toString方法会输出当前对象类型,所以Array.prototype.toString()会输出"[object Array]"
所以这就是我们为什么用Object.prototype.toString来检测类型
那么为什么用call呢?
call的作用是改变this指向。
Object
上面代码,实际上是执行了Object的toString方法,但this却是Array,所以输出的是Array是类型。
- 其它用法
function
是不是很神奇...
重写了一个方法的toString方法,然后如果这个方法当字符串用,那么就会执用方法上的toString方法,并返回结果,然后再作处理...
当然,如果执行这个函数,还是能执行的,这时与toString就没啥关系了。
利用这个特性,可以实现一些神奇的功能
const
有几个特点:
- 可以接收任何数量的参数,作累加计算
- 返回一个方法,可以用来接收更多参数
- 返回一个累加值
正常来说,其实2与3是矛盾的,函数只能返回一种值,不可能返回的既是函数也是数值的。
这就是toString的特殊用法了。