对JS中Object.prototype.toString.call([value])的理解

通过获取Object原型上的toString方法,让方法中的this变为需要检测的数据类型,并且让方法执行。

在我们使用toString检测数据类型,不管你是什么类型的值,我们都可以正常检测出需要的结果(此方法检测是万能的)。typeof不能具体的检测出是数组类型还是正则类型;instanceof(当前实例是否所属这个类)不能检测出基本数据类型,instanceof检测的原理是基于原型链检测的:只要当前类在实例的原型链上,最后返回的结果都是true;constructor(获取当前要检测数据值的constructor,判断它是否是某一个数据类型内置类来检测)检测数据类型不太可靠,如果我们手动的将constructor的值改变,检测的值就不是我们想要的。(具有可读可写性,不太靠谱)

在Number、String、Boolean、Array、RegExp、Function …这些类的原型上都有一个toString方法:这个方法就是把本身的值转为字符串的。

(250).toString() -> ‘12’
(true).toString() ->‘true’
[20,30].toString() ->’[20,30]’

在Object这个类的原型上也有一个toString方法,但是这个方法并不是把值转为字符串,而是返回当前值的所属类的详细信息,固定结构:’[object 所属的类]'

例如:
var obj={name:‘lyc’}
obj.toString(); =>’[object Object]’ 这时调取的正是Object.prototype.toString

代码解析
obj.toString()
首先执行Object.prototyper.toString方法
这个方法中的this就是我们操作的数据值obj

总结:Object.prototype.toString执行的时候会返回当前方法中this的所属信息。也就是说,我想知道谁的所属类信息,就可以把这个toString执行,并其让this变为我们检测的这个数据值,那么返回的结果就是当前检测这个值的所属类信息。

Object.prototype.toString.call(250) =>"[object Number]"

Object.prototype.toString.call(true) =>"[object Boolean]"

Object.prototype.toString.call([250,290]) =>"[object Array]"

...

检测类型包括以下类型

"[object Number]"
"[object Boolean]"
"[object String]"
"[object Null]"
"[object Undefined]"
"[object Object]"
"[object Array]"
"[object RegExp]"
"[object Function]"

切记:我们得到的是字符串类型的,一定要记得加引号哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值