为什么Object.prototype.toString.call()可以判断数据类型

重写toString方法

简单数据类型Number、Boolean,复杂数据类型中的Array、Function都是Object类的实例,会继承Object的toString方法,但是这些类型的toString方法都进行了重写。因此,当我们直接调用toString方法会将各种类型转化为字符串,结果如下:

console.log((123).toString())  //'123'
console.log((true).toString())  //'true'
console.log([1,2,3].toString())  //'1,2,3'
function fn(){}
console.log(fn.toString())  //'function fn(){}'
console.log({}.toString())  //'[object Object]'

Object原型上的toString方法

当我们把重写的toString方法删除后,再进行相同的调用,此时会通过原型链找到Object原型上的toString方法,结果如下:

delete Number.prototype.toString
console.log((123).toString())   //'[object Number]'

因此,我们要判断数据类型就要调用Object原型上的toString方法,使用call()来进行调用,结果如下:

console.log(Object.prototype.toString.call(123)) //'[object Number]'
console.log(Object.prototype.toString.call('123')) //'[object String]'
console.log(Object.prototype.toString.call(true)) //'[object Boolean]'
console.log(Object.prototype.toString.call([1,2,3])) //'[object Array]'
console.log(Object.prototype.toString.call({})) //'[object Object]'
console.log(Object.prototype.toString.call(function fn(){})) //'[object Function]'
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值