js中如何准确的判断数据类型

第一种方式也是最常见的方式,用type of判断:console.log(type of data),typeof检测基本类型是没有问题的,如字符串、数值、布尔和undefined,但是如果检测对象或null的话都会返回‘object’;

第二种方式,用 instanceof 判断,注意此方法后面一定是数据类型:console.log(data instanceof Array),通常我们并不是想知道某个值是对象,而是想知道它是什么类型的对象,如上:变量data是Array类型的对象?; 

注意:所有引用类型值都是object的实例,所以在检测一个引用类型值和Object构造函数时,instanceof操作符会一直返回true。如用instanceof操作符检测基本类型值时,会一直返回false,原因很简单,因为基本类型不是对象。

第三种方式,用constructor判断:console.log(data.constructor === Array);

第四种方式,用Object.prototype.toString.call(data);此种方式可以准确的判断出数据类型。

console.log(Object.prototype.toString.call(data));

原理:

1、在JavaScript中,一切皆为对象,强制将变量转换成为字符串,使它暴露出内部的[[class]]属性。

2、首先获取对象内部属性[[class]](每个对象都有属于自己的[[class]]),然后根据这个属性返回一个类似于"[object Number]"的字符串作为结果,    ([[]]用来表示语言内部用到的,外部不可直接访问的属性,称之为内部属性。)。利用此方法并且配合call方法可以取得任何对象内部属性的[[class]],然后把类型检测转化为字符串比较,以此来判断数据类型。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,871评论 6 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,955评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,477评论 19 139
  • 这是《富爸爸穷爸爸》的一篇短评,看官来了,就请留步,往下看看可好。 这本书是所有理财达人推荐的第一本书,可见它对理...
    长呀长阅读 1,891评论 0 0
  • 偶然于 杯盏交错之际 微瞌双目 我看见一颗露珠 从青草的叶脉里走出来 与我含笑对视 这让我大喜过望 我的梦想于是轻...
    春笺素心阅读 1,521评论 0 0