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 相关文章推荐
select组合框option的捕捉实例代码
Sep 30 Javascript
Google Map API更新实现用户自定义标注坐标
Jul 29 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
Dec 29 Javascript
javascript 获取HTML DOM父、子、临近节点
Jun 16 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
Jul 08 Javascript
canvas基础绘制-绚丽倒计时的实例
Sep 17 Javascript
redux-saga 初识和使用
Mar 10 Javascript
vue axios登录请求拦截器
Apr 02 Javascript
微信小程序实现折线图的示例代码
Jun 07 Javascript
简单实现节流函数和防抖函数过程解析
Oct 08 Javascript
浅谈Vue.set实际上是什么
Oct 17 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
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
微信支付开发维权通知实例
2016/07/12 PHP
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
VSCode中如何利用d.ts文件进行js智能提示
2018/04/13 Javascript
学习Vue组件实例
2018/04/28 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
iview form清除校验状态的实现
2019/09/19 Javascript
node.js爬虫框架node-crawler初体验
2020/10/29 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
详解python中index()、find()方法
2019/08/29 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
python生成大写32位uuid代码
2020/03/03 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
销售人员工作自我评价
2014/09/21 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
2014年副班长工作总结
2014/12/10 职场文书
优秀学生干部事迹材料
2014/12/24 职场文书
放射科岗位职责
2015/02/14 职场文书
个人工作年终总结
2015/03/09 职场文书
地道战观后感500字
2015/06/04 职场文书
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS
MySQL 如何限制一张表的记录数
2021/09/14 MySQL
python中tkinter复选框使用操作
2021/11/11 Python
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android