toString.call()通用的判断数据类型方法示例


Posted in Javascript onAugust 28, 2020

大家都知道判断数据类型的方法有很多。我们常用的有typeof但是,这个方法有一定的局限性。

typeof null
// "object"
 
typeof [8]
// "object"
 
typeof {}
// "object"
 
typeof function(){}
// "function"
typeof 2
//"number"
 
typeof ""
//"string"
 
typeof true
//"boolean"
 
typeof undefined
//"undefined"
 
typeof Symbol(2)
// "symbol"

typeof 无法区分null 数组和对象,通常我们会区分判断Array和Object

有时会用instanceof 来判断是不是一个对象的实例子

[] instanceof Array
 // true 这种方法可以判断数组,不能区分对象
[] instanceof Object
// true
 
null instanceof Object
// false 也不能区分null

下面介绍一种方法,对每一种数据类型都实用。

toString.call(function(){})
// "[object Function]"
 
toString.call(null)
//"[object Null]"
 
toString.call([2])
"[object Array]"
 
toString.call(undefined)
//"[object Undefined]"
 
toString.call('stjd')
//"[object String]"
 
toString.call(1)
//"[object Number]"
 
toString.call(true)
//"[object Boolean]"
 
toString.call(Symbol(3))
// "[object Symbol]"
 
toString.call({q:8})
//"[object Object]"

再来思考, toString.call([2]) 意思就是改变方法中的this指向,指向传递进去的参数,也就是[2]。那我这样写不是更直观吗?[2].toString()。结果

[2].toString()
//"2"
var obj = {a: 67}
  console.log(obj.toString())
  // [object Array]

对比上面两个返回的值是不一样的。这是因为[2].toString()调用的是数组的toSting()方法,而不是对象的toSting()方法。Array改写了Object的toString方法。

toSting.call()实际上就是 Object.prototype.toSting.call()

console.log(Object.prototype.toString.call([33])) // [object Array]

而[2].toSting()实际上是

console.log(Array.prototype.toString.call([2])) //2

使用的过程中,可以这样封装函数

function isType(type) {
   return function(obj) {
    return {}.toString.call(obj) == "[object " + type + "]"
   }
  }
  
  var isObject = isType("Object")
  var isString = isType("String")
  var isArray = Array.isArray || isType("Array")
  var isFunction = isType("Function")
  var isUndefined = isType("Undefined")

总结

到此这篇关于toString.call()通用的判断数据类型方法的文章就介绍到这了,更多相关toString.call()判断数据类型内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
alixixi runcode.asp的代码不错的应用
Aug 08 Javascript
javascript阻止scroll事件多次执行的思路及实现
Nov 08 Javascript
JS图片自动轮换效果实现思路附截图
Apr 30 Javascript
js换图片效果可进行定时操作
Jun 09 Javascript
jquery简单实现幻灯片的方法
Aug 03 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
Aug 21 Javascript
Angular.js中$apply()和$digest()的深入理解
Oct 13 Javascript
vue-cli如何快速构建vue项目
Apr 26 Javascript
Node.js+Express+MySql实现用户登录注册功能
Jul 10 Javascript
详解vue表单——小白速看
Apr 08 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
Sep 10 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
Oct 27 Javascript
你不知道的 TypeScript 高级类型(小结)
Aug 28 #Javascript
js和jquery判断数据类型的4种方法总结
Aug 28 #jQuery
Node在Controller层进行数据校验的过程详解
Aug 28 #Javascript
Postman无法正常返回结果问题解决
Aug 28 #Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
Aug 28 #Javascript
vue自定义指令和动态路由实现权限控制
Aug 28 #Javascript
vue 动态给每个页面添加title、关键词和描述的方法
Aug 28 #Javascript
You might like
Zend的MVC机制使用分析(二)
2013/05/02 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
学习并汇集javascript匿名函数
2010/11/25 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
深入了解js原型模式
2019/05/30 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
微信小程序中data-key属性之数据传输(经验总结)
2020/08/22 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
Vue $attrs & inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
Python入门学习之字符串与比较运算符
2015/10/12 Python
使用Python生成随机密码的示例分享
2016/02/18 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
2019/12/12 Python
CSS3色彩模式有哪些?CSS3 HSL色彩模式的定义
2016/04/26 HTML / CSS
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
如何开发安全的AJAX应用
2014/03/26 面试题
部队万能检讨书
2014/02/20 职场文书
技能竞赛活动方案
2014/02/21 职场文书
演讲主持词
2014/03/18 职场文书
2015年元旦标语大全
2014/12/09 职场文书
2016春节放假通知范文
2015/08/18 职场文书
JS创建或填充任意长度数组的小技巧汇总
2021/10/24 Javascript
Golang 并发下的问题定位及解决方案
2022/03/16 Golang