【js】关于data.toString()和Object.prototype.toString.call()

data.toString()

// 假设data是个数组
[1, 2, 3].toString()		// 得到结果:'1, 2, 3'

// 假设data是个对象
{ data: 123 }.toString()	// 得到结果: [Object Object]

这是因为Array和Object的prototype里面都有toString,Object.toString()是判断数据类型信息;而Array.toString()是转换成stringl类型,返回一个以逗号分隔的字符串

console.log(Array.prototype.hasOwnProperty('toString'))	// true

如果去掉Array的prototype上面的toString,Array就去寻找Object的toString并继承,这是原型链,此时再arr.toString()就不是表示把Array转成string类型,而是判断数据类型

// 假设此时已经执行了删除Array上的toString方法的操作,Array上已经不存在toString了
Array.prototype.toString([1, 2, 3])		// [Object Object]

但是有个问题,为什么输出的是[Object Object],而不是[object Array],明明我传入的是一个数组。那是因为Object.prototype本身是对象类型,所以返回对象,如果要输出传入的数据的类型,就要使用call改变传入值的this指向,让传入值指向Object.prototype

Object.prototype.toString.call([1, 2, 3])		// [object Array]

一般用typeof判断数据类型,但是typeof不能判断Object Array null,如果要判断Object和Array,可以用Array.isArray、instanceOf,但是用Object.prototype.toString.call可以判断所以类型,比如:

console.log(Object.prototype.tpString.call(数据) === [object `${数据类型}`]})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值