要知道js中对数据类型进行判断有哪些方式,就先要知道js中有六种原始数据类型和对象object,六种原始数据类型分别是:
undefined,null,布尔值(Boolean),字符串(string),数值(number),symbol(es6新定义);
而对js数据类型判断的方式有以下几种:
typeof
typeof是最常见的判断方法,typeof可以看作JS内部已经定义好的各个类型返回其对应的字符串,它不深入值本身,不进行类型转换,只针对于当前值返回其对应的类型值。同样的数据类型通过typeof运算符运算都是一样的,它没有原理可言,JS就是这样定义的,我们只管记死它。
typeof各类型返回结果列表
类型 | 结果 |
---|---|
Undefined | "undefined" |
Null | "object" |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Symbol (ECMAScript 6 新增) | "symbol" |
宿主对象(由JS环境提供) | Implementation-dependent |
函数对象([[Call]] 在ECMA-262条款中实现了) | "function" |
任何其他对象 | "object" |
instanceof
instanceof是用于判断一直对象类型的方法,instanceof运算符与typeof运算符相识,用于识别正在处理的对象类型,与 typeof 方法不同的是,instanceof 方法要求开发者明确地确认对象为某特定类型。
var str1="hello";
var str2=new String("hello");
var arr=[1,2,3];
function person(){}
function man(){}
man.prototype=new person();
var m1=new person();
var m2=new man();
str1 instanceof String //false
str2 instanceof String //true
arr instanceof Array //true
arr instanceof window.frames[0].Array //false
m1 instanceof person //true
m2 instanceof man //true
m2 intanceof person //true
constructor
constructor是根据对象的constructor判断,通过constructor我们可以得到 instance不能得到的 str num bool 这些基本类型值
alert(c.constructor === Array) ----------> true
alert(d.constructor === Date) -----------> true
alert(e.constructor === Function) -------> true
注意: constructor 在类继承时会出错
eg:
function A(){};
function B(){};
A.prototype = new B(); //A继承自B
var aObj = new A();
alert(aobj.constructor === B) -----------> true;
alert(aobj.constructor === A) -----------> false;
而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true:
alert(aobj instanceof B) ----------------> true;
alert(aobj instanceof B) ----------------> true;
言归正传,解决construtor的问题通常是让对象的constructor手动指向自己:
aobj.constructor = A; //将自己的类赋值给对象的constructor属性
alert(aobj.constructor === A) -----------> true;
alert(aobj.constructor === B) -----------> false; //基类不会报true了;
想要知道更多可以点击下面链接:
https://www.jb51.net/article/70824.htm