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启动应用程序的一个简单例子
May 11 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
Nov 30 Javascript
JavaScript打字小游戏代码
Dec 26 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
Nov 15 Javascript
js操作table元素实现表格行列新增、删除技巧总结
Nov 18 Javascript
jQuery中队列queue()函数的实例教程
May 03 Javascript
聊一聊JS中的prototype
Sep 29 Javascript
JavaScript表单验证完美代码
Mar 02 Javascript
全面解析vue中的数据双向绑定
May 10 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
Jul 13 Javascript
vue视频播放插件vue-video-player的具体使用方法
Nov 08 Javascript
Node如何后台数据库使用增删改查功能
Nov 21 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中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
php导出csv文件,可导出前导0实例代码
2016/11/16 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
常用PHP封装分页工具类
2017/01/14 PHP
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
在Django的模板中使用认证数据的方法
2015/07/23 Python
Python基于有道实现英汉字典功能
2015/07/25 Python
Python 基础知识之字符串处理
2017/01/06 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
对python 读取线的shp文件实例详解
2018/12/22 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2019/01/23 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
Python创建数字列表的示例
2019/11/28 Python
jupyter notebook实现显示行号
2020/04/13 Python
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
公司授权委托书范本
2014/04/03 职场文书
应届大专生求职信
2014/06/26 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书
Python 如何安装Selenium
2021/05/06 Python
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android