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 eval和JSON之间的联系
Dec 31 Javascript
jQuery 幻灯片插件(带缩略图功能)
Jan 24 Javascript
简单的代码实现jquery定时器
Jan 03 Javascript
js实现Select头像选择实时预览代码
Aug 17 Javascript
Bootstrap响应式侧边栏改进版
Sep 17 Javascript
AngularJS动态加载模块和依赖的方法分析
Nov 08 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
Jun 21 Javascript
JavaScript实现的数字与字符串转换功能示例
Aug 23 Javascript
Vue header组件开发详解
Jan 26 Javascript
通过vue写一个瀑布流插件代码实例
Sep 07 Javascript
JavaScript原型式继承实现方法
Nov 06 Javascript
JavaScript变量基本使用方法实例分析
Nov 15 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
最小化数据传输――在客户端存储数据
2006/10/09 PHP
创建配置文件 用PHP写出自己的BLOG系统 2
2010/04/12 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
php中final关键字用法分析
2016/12/07 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
又一个小巧的图片预加载类
2007/05/05 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
js正则相关知识点专题
2018/05/10 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
python中的变量如何开辟内存
2018/06/26 Python
总结python中pass的作用
2019/02/27 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
Python类反射机制使用实例解析
2019/12/30 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
详解Pytorch显存动态分配规律探索
2020/11/17 Python
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
教师求职自荐书
2014/06/14 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
综合测评个人总结
2015/03/03 职场文书
2015年信访工作总结
2015/04/07 职场文书