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 相关文章推荐
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
Apr 20 Javascript
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
Dec 20 Javascript
Javascript 按位与赋值运算符 (&=)使用介绍
Feb 04 Javascript
js时间比较示例分享(日期比较)
Mar 05 Javascript
IE6-8中Date不支持toISOString的修复方法
May 04 Javascript
JavaScript保留关键字汇总
Dec 01 Javascript
用file标签实现多图文件上传预览
Feb 14 Javascript
jQuery简单实现MD5加密的方法
Mar 03 Javascript
详解如何在Angular优雅编写HTTP请求
Dec 05 Javascript
微信小程序的线程架构【推荐】
May 14 Javascript
小程序Request的另类用法详解
Aug 09 Javascript
学习 Vue.js 遇到的那些坑
Feb 02 Vue.js
你不知道的 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
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
php 使用post,get的一种简洁方式
2010/04/25 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
php插入排序法实现数组排序实例
2015/02/16 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
2016/01/08 PHP
php字符串操作常见问题小结
2016/10/11 PHP
万能的php分页类
2017/07/06 PHP
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
js禁止表单重复提交
2017/08/29 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
pycharm新建一个python工程步骤
2019/07/16 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
PageFactory设计模式基于python实现
2020/04/14 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
基于python检查矩阵计算结果
2020/05/21 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
html5开发之viewport使用
2013/10/17 HTML / CSS
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
党员公开承诺书范文
2014/03/25 职场文书
节水倡议书范文
2014/04/15 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
民事申诉状范本
2015/05/20 职场文书
庆七一晚会主持词
2015/06/30 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
党员理论学习心得体会
2016/01/21 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
2021/03/31 Servers