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 相关文章推荐
javascript 有用的脚本函数
May 07 Javascript
JavaScript Event学习第七章 事件属性
Feb 07 Javascript
JS自动适应的图片弹窗实例
Jun 29 Javascript
swtich/if...else的替代语句
Aug 16 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
Apr 27 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
Aug 03 Javascript
使用JS实现导航切换时高亮显示的示例讲解
Aug 22 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
Aug 24 jQuery
vue.js 添加 fastclick的支持方法
Aug 28 Javascript
微信小程序实现的绘制table表格功能示例
Apr 26 Javascript
vue回到顶部监听滚动事件详解
Aug 02 Javascript
详解vue中v-bind:style效果的自定义指令
Jan 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 zend解密软件绿色版测试可用
2008/04/14 PHP
php注销代码(session注销)
2012/05/31 PHP
PHP创建PowerPoint2007文档的方法
2015/12/10 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
YII框架http缓存操作示例
2019/04/29 PHP
php多进程应用场景实例详解
2019/07/22 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
jquery 操作DOM案例代码分享
2012/04/05 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
jQuery获取Table某列的值(推荐)
2017/03/03 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
Python Socket实现简单TCP Server/client功能示例
2017/08/05 Python
ubuntu安装mysql pycharm sublime
2018/02/20 Python
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
护士感人事迹
2014/05/01 职场文书
工地安全标语
2014/06/07 职场文书
小学安全汇报材料
2014/08/14 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python
javascript之Object.assign()的痛点分析
2022/03/03 Javascript