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 相关文章推荐
javascript form 验证函数 弹出对话框形式
Jun 23 Javascript
动态表格Table类的实现
Aug 26 Javascript
JavaScript中把数字转换为字符串的程序代码
Jun 19 Javascript
js 为label标签和div标签赋值的方法
Aug 08 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
Jul 17 Javascript
深入理解JavaScript编程中的同步与异步机制
Jun 24 Javascript
jQuery中text() val()和html()的区别实例详解
Jun 28 Javascript
微信小程序 http请求详细介绍
Oct 09 Javascript
React父子组件间的传值的方法
Nov 13 Javascript
深入了解响应式React Native Echarts组件
May 29 Javascript
jQuery表单校验插件validator使用方法详解
Feb 18 jQuery
element中el-container容器与div布局区分详解
May 13 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
计算php页面运行时间的函数介绍
2013/07/01 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
2015/10/27 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
基于JavaScript实现抽奖系统
2018/01/16 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
python中map、any、all函数用法分析
2015/04/21 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
Python中的默认参数实例分析
2018/01/29 Python
使用Django和Python创建Json response的方法
2018/03/26 Python
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
保密承诺书
2014/03/27 职场文书
主题团日活动总结
2014/06/25 职场文书
违章停车检讨书
2014/10/21 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
介绍信怎么写
2015/01/30 职场文书
自我检讨书怎么写
2015/05/07 职场文书
运动会通讯稿100字
2015/07/20 职场文书
《刷子李》教学反思
2016/02/20 职场文书
晚会开幕词范文
2016/03/04 职场文书
详解Go与PHP的语法对比
2021/05/29 PHP
Android自定义双向滑动控件
2022/04/19 Java/Android
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript