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 页面载入进度条实现代码
Feb 08 Javascript
Firebug 字幕文件JSON地址获取代码
Oct 28 Javascript
node.js中的buffer.toJSON方法使用说明
Dec 14 Javascript
javascript实现checkbox全选的代码
Apr 30 Javascript
jQuery实现自动调整字体大小的方法
Jun 15 Javascript
jQuery插件ajaxFileUpload使用实例解析
Oct 19 Javascript
Vue2路由动画效果的实现代码
Jul 10 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
May 24 Javascript
扫微信小程序码实现网站登陆实现解析
Aug 20 Javascript
JavaScript运动原理基础知识详解
Apr 02 Javascript
nuxt静态部署打包相对路径操作
Nov 06 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 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
理解和运用PHP中的多态性[译]
2011/08/02 PHP
php 使用GD库为页面增加水印示例代码
2014/03/24 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
2016/10/14 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
PHP使用栈解决约瑟夫环问题算法示例
2017/08/27 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
JQuery autocomplete 使用手册
2010/04/01 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
2013/05/19 Javascript
jQuery插件zepto.js简单实现tab切换
2015/06/16 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
Python字符串处理实例详解
2017/05/18 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
python字符串格式化方式解析
2019/10/19 Python
python梯度下降算法的实现
2020/02/24 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
如何设置Java的运行环境
2013/04/05 面试题
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
HR喜欢的自荐信格式
2013/10/08 职场文书
运动会广播稿诗歌版
2014/09/12 职场文书
小学生班干部竞选稿
2015/11/20 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
正则表达式拆分url实例代码
2022/02/24 Java/Android
Go web入门Go pongo2模板引擎
2022/05/20 Golang