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 相关文章推荐
基于jquery的下拉框改变动态添加和删除表格实现代码
Sep 12 Javascript
js 页面元素的几个用法总结
Nov 18 Javascript
JS与jQuery遍历Table所有单元格内容的方法
Dec 07 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
Nov 23 Javascript
正则表达式替换html元素属性的方法
Nov 26 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
Jan 17 Javascript
详解weex默认webpack.config.js改造
Jan 08 Javascript
JavaScript常见事件处理程序实例总结
Jan 05 Javascript
VeeValidate 的使用场景以及配置详解
Jan 11 Javascript
微信小程序实现富文本图片宽度自适应的方法
Jan 20 Javascript
vue实现点击隐藏与显示实例分享
Feb 13 Javascript
JavaScript遍历数组和对象的元素简单操作示例
Jul 09 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
怎样辨别一杯好咖啡
2021/03/03 新手入门
简单的过滤字符串中的HTML标记
2006/12/25 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
PHP7多线程搭建教程
2017/04/21 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
JQuery live函数
2010/12/24 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
jquery移动端TAB触屏切换实现效果
2020/12/22 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
js实现倒计时及时间对象
2016/11/15 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
详解从买域名到使用pm2部署node.js项目全过程
2018/03/07 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
vue使用websocket的方法实例分析
2019/06/22 Javascript
vue.js实现三级菜单效果
2019/10/19 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
Python基于动态规划算法计算单词距离
2015/07/25 Python
浅析AST抽象语法树及Python代码实现
2016/06/06 Python
Python多线程经典问题之乘客做公交车算法实例
2017/03/22 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
Python for循环生成列表的实例
2018/06/15 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
电子商务自荐书范文
2014/01/04 职场文书
社区创先争优承诺书
2014/08/30 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书