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 Mobile框架开发移动端Web App的入门教程
May 17 Javascript
js生成随机数(指定范围)的实例代码
Jul 10 Javascript
BootStrap使用file-input插件上传图片的方法
Sep 05 Javascript
AngularJS ng-style中使用filter
Sep 21 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
Sep 25 Javascript
Javascript typeof与instanceof的区别
Oct 18 Javascript
Angular.js跨controller实现参数传递的两种方法
Feb 20 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
Sep 14 Javascript
JavaScript实现随机点名器实例详解
May 07 Javascript
Vue 实现登录界面验证码功能
Jan 03 Javascript
用jQuery实现抽奖程序
Apr 12 jQuery
vue动态绑定style样式
Apr 20 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获取当前所在目录位置的方法
2014/11/26 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
web基于浏览器的本地存储方法应用
2012/11/27 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
jQuery leonaScroll 1.1 自定义滚动条插件(推荐)
2016/09/17 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
2019/09/19 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python数据结构之二叉树的遍历实例
2014/04/29 Python
Python 序列化 pickle/cPickle模块使用介绍
2014/11/30 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
pyhton列表转换为数组的实例
2018/04/04 Python
Python获取时间戳代码实例
2019/09/24 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
英国家电直销:Appliances Direct
2016/09/22 全球购物
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
劲霸男装广告词改编版
2014/03/21 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
个人自我剖析材料
2014/09/30 职场文书
建筑横幅标语
2014/10/09 职场文书
2019各种承诺书范文
2019/06/24 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL