第一种方式也是最常见的方式,用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]],然后把类型检测转化为字符串比较,以此来判断数据类型。
网友评论