JS中检测数据类型只有四种方式

  • 1、typeof 用来检测数据类型的运算符

  [typeof value]

1)返回值:首先是一个字符串,然后包含了我们常用的数据类型,例如:"number"、"string"、"boolean"、"undefined"、"object"、"function"
typeof typeof typeof [12] -> "string"
2)typeof null ->"object" 因为null是一个空对象指针
3)typeof不能具体的细分对象、数组、正则等,因为不管检测哪一个返回的都是"object"

  • 2、instanceof / constructor

    • 1)instanceof:检测当前实例是否属于某一个类,属于的话返回true,不属于返回false
var ary=[];
ary instanceof Array ->true
ary instanceof RegExp ->false
ary instanceof Object ->true 所有的对象都是Object这个基类的一个实例

  • 2)constructor
ary.constructor===Array ->true 说明ary是Array这个类的一个实例(constructor可以让用户自己来修改,所有我们一般不用这个来检测)

  • 3)instanceof的局限性:只要在这个实例的原型链上的类,用instanceof检测的时候都为true

在类的继承中,我们只是单纯通过instanceof来检测数据类型的话是不准确的
[案例]

function Fn() {this.x=100;}
Fn.prototype = new Array;
var f = new Fn;
//f只是继承了数组中常用的方法,但是不是数组,例如:在梨树上嫁接苹果树,苹果树只是继承使用了梨树的水分和营养,但是长出来的果实还是苹果而不是梨
//console.log(f instanceof Fn);//->true
//console.log(f instanceof Array);//->true
//console.log(f instanceof Object);//->truevar oDiv=document.getElementById("div1");
//oDiv->HTMLDivElement->HTMLElement->Element->Node->EventTarget->Object
console.log(oDiv instanceof EventTarget);//->true

  • 3、toString检测数据类型(常用而且相对来说精准的检测方式,上述方式出现的缺陷在这里都弥补了)

    • 1)原理:在Object.prototype上有一个toString方法,这个方法执行的时候,会返回方法中this关键字对应数据值的数据类型,例如:
//Object.prototype.toString() ->返回的是 Object.prototype 的数据类型 ->"[object Object]"
//f.toString() ->返回的是f的数据类型 ->"[object Object]"

  • 2)这样的话,我们就可以让Object.prototype.toString执行,并且通过call/apply来改变里面的this关键字,也就是想检测谁的数据类型,我们就可以让this变为谁
Object.prototype.toString.call(12) ->检测12的数据类型 ->"[object Number]"
Object.prototype.toString.call("zhufeng") ->"[object String]"
Object.prototype.toString.call(null) ->"[object Null]"
Object.prototype.toString.call(undefined) ->"[object Undefined]"
Object.prototype.toString.call([]) ->"[object Array]"
Object.prototype.toString.call(/^$/) ->"[object RegExp]"
Object.prototype.toString.call(function(){}) ->"[object Function]"

  • 3)检测的返回值 -> "[object 当前数据类型所属的内置类]"

转载于:https://www.cnblogs.com/Scar007/p/7722881.html

检测数据类型的几种方式相关推荐

  1. php如何对数据类型检测 有哪些方法,php检测数据类型的几种方法汇总

    下面小编就为大家带来一篇PHP检测数据类型的几种方法(总结).小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 在JavaScript中,使用typeof可以检测基本数据类 ...

  2. php怎么检测数据类型,PHP检测数据类型的几种方法总结和技巧

    下面小编就为大家带来一篇PHP检测数据类型的几种方法(总结).小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 在JavaScript中,使用typeof可以检测基本数据类 ...

  3. 字符串转int数据类型的三种方式

    方法一: Integer.valueOf( ) 它将返回一个包装器类型 Integer,当然可以通过自动拆箱的方式将其转成 int 类型. String a = "100"; St ...

  4. 判断数据类型的几种方式

    文章目录 前言 一.数据类型有那些 二. 数据类型判断方法 1.typeof 2.instanceof 3.constructor 4.Object.prototype.toString 5.练习 6 ...

  5. 浅析综合布线系统中检测双绞线的几种方式

    一般情况下,综合布线系统工程都是比较大的项目,每一个步骤都需要整然有序地进行,每进行一步都需要谨慎,不然会对整个项目造成影响.所以无论是前期还是后期都需要对相关的材料进行必要的检测,以保证项目的质量和 ...

  6. 常用检测数据类型的几种方法

    定义几种数据类型 第一种:typeof检测 返回值:对应数据类型的小写字符串  例:Number 数字类型 返回就是 小写的number 第二种:instanceof检测 返回值:返回值是布尔值(tr ...

  7. python查看各列数据类型_pandas中查看数据类型的几种方式

    在获得数据之后.分析数据之前,我们一般需要对数据总体进行一个概览,如有哪些字段,每个字段的类型,值是否缺失等,以下列出了几种方法,供我们方便快捷的查看dataframe的数据类型. 1.维度查看:df ...

  8. ROS话题通信中创建自定义数据类型的两种方式

    一.在同一个功能包下创建.msg文件 1.在功能包目录下创建msg文件夹 2.在文件夹中创建.msg文件 3.在该功能包的package.xml文件中加入: <build_depend>m ...

  9. js检测数据类型四种办法

    typeof类型检测 作用:用于判断一个一个表达式,(对象或者原始值),返回一个字符串. var a; var b=null; var c=true; var d=1; var e='s'; var ...

最新文章

  1. SQL Server数据库镜像部署 错误1418’处理及证书验证
  2. SENetSKNet 解读
  3. 计算机丢失wpcap.dll会影响什么,Win7系统提示wpcap.dll丢失如何解决?
  4. 红橙Darren视频笔记 面试题 为什么view获取宽高为0 onCreate onResume view.post源码浅析(继承activity api27)
  5. 解决 Flex模块切换后导致对象转换失败 注册信息丢失
  6. Lintcode: Implement Queue by Stacks 解题报告
  7. 【硬件】存储的RAID技术详解
  8. php xml namespaces,PHP getDocNamespaces()函数讲解
  9. android 底部导航菜单_司机共创会前方拥堵!导航路线功能该怎么优化?
  10. 管理感悟:一偷懒,必出错
  11. 802.1QCC TSN配置模型
  12. 机器人编程软件semia_少儿机器人编程与软件编程区别
  13. aws saa考试费用是多少?aws saa考试准备多久才能考试?
  14. SSM搭建-Spring之bean的属性值XML注入方式(4)
  15. 2017年一季度工作回顾及感悟
  16. 以太坊环境以及Solidity学习笔记
  17. GD32F450芯片管脚排列图
  18. 电 脑 小 知 识 荟萃
  19. XDL-(1)Linux文件操作命令
  20. Android 平台语音通话及回音消除、噪音消除研究(转)

热门文章

  1. 处理机调度实验总结_计算机系统结构总结
  2. CentOS 迎来更新换代版本 CentOS Stream 9 附下载镜像OS地址
  3. 各类电脑高效率神器使用及下载地址
  4. After Effects 2019 CC for mac下载安装激活步骤演示
  5. 如何掌握平面设计中的减法思维
  6. mysql服务实例配置_MySQL多实例配置
  7. Linux下的rsync远程增量备份详解
  8. Liunx下的日志清理shell脚本实战之日志备份
  9. mongotemplate 查list_mongoTemplate.aggregate()聚合查询 时间
  10. 自顶向下彻底理解 Java 中的 Synchronized