toString.call()通用的判断数据类型方法示例
大家都知道判断数据类型的方法有很多。我们常用的有typeof但是,这个方法有一定的局限性。
typeofnull //"object" typeof[8] //"object" typeof{} //"object" typeoffunction(){} //"function" typeof2 //"number" typeof"" //"string" typeoftrue //"boolean" typeofundefined //"undefined" typeofSymbol(2) //"symbol"
typeof无法区分null数组和对象,通常我们会区分判断Array和Object
有时会用instanceof来判断是不是一个对象的实例子
[]instanceofArray //true这种方法可以判断数组,不能区分对象 []instanceofObject //true nullinstanceofObject //false也不能区分null
下面介绍一种方法,对每一种数据类型都实用。
toString.call(function(){}) //"[objectFunction]" toString.call(null) //"[objectNull]" toString.call([2]) "[objectArray]" toString.call(undefined) //"[objectUndefined]" toString.call('stjd') //"[objectString]" toString.call(1) //"[objectNumber]" toString.call(true) //"[objectBoolean]" toString.call(Symbol(3)) //"[objectSymbol]" toString.call({q:8}) //"[objectObject]"
再来思考,toString.call([2])意思就是改变方法中的this指向,指向传递进去的参数,也就是[2]。那我这样写不是更直观吗?[2].toString()。结果
[2].toString() //"2"
varobj={a:67} console.log(obj.toString()) //[objectArray]
对比上面两个返回的值是不一样的。这是因为[2].toString()调用的是数组的toSting()方法,而不是对象的toSting()方法。Array改写了Object的toString方法。
toSting.call()实际上就是Object.prototype.toSting.call()
console.log(Object.prototype.toString.call([33]))//[objectArray]
而[2].toSting()实际上是
console.log(Array.prototype.toString.call([2]))//2
使用的过程中,可以这样封装函数
functionisType(type){ returnfunction(obj){ return{}.toString.call(obj)=="[object"+type+"]" } } varisObject=isType("Object") varisString=isType("String") varisArray=Array.isArray||isType("Array") varisFunction=isType("Function") varisUndefined=isType("Undefined")
总结
到此这篇关于toString.call()通用的判断数据类型方法的文章就介绍到这了,更多相关toString.call()判断数据类型内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。