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 相关文章推荐
学习YUI.Ext基础第一天
Mar 10 Javascript
jquery控制listbox中项的移动并排序的实现代码
Sep 28 Javascript
Js如何判断客户端是PC还是手持设备简单分析
Nov 22 Javascript
js过滤HTML标签以及空格的思路及代码
May 24 Javascript
JS实现控制表格内指定单元格内容对齐的方法
Mar 30 Javascript
JS实现网页上随滚动条滚动的层效果代码
Nov 04 Javascript
原生js实现autocomplete插件
Apr 14 Javascript
使用RequireJS库加载JavaScript模块的实例教程
Jun 06 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
Sep 02 Javascript
利用bootstrapValidator验证UEditor
Sep 14 Javascript
Vue实现用户自定义字段显示数据的方法
Aug 28 Javascript
微信公众号开发之微信支付代码记录的实现
Oct 16 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
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
浅析PHP中Session可能会引起并发问题
2015/07/23 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
2013/09/26 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
javascript中cookie对象用法实例分析
2015/01/30 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
2015/08/13 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
JS常用正则表达式总结【经典】
2017/05/12 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
详解Python中的多线程编程
2015/04/09 Python
python numpy 按行归一化的实例
2019/01/21 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
Python线程指南分享
2019/11/19 Python
PHP笔试题
2012/02/22 面试题
计算机网络专业个人的自我评价
2013/10/17 职场文书
电信专业毕业生推荐信
2013/11/18 职场文书
高中地理教学反思
2014/01/29 职场文书
保健品市场营销方案
2014/03/31 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
教师党员承诺书2015
2015/01/21 职场文书
2019年描写人生经典诗句大全
2019/07/08 职场文书