js中对数据类型进行判断的所有方式

js 邓文星
文章标签: js

要知道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

http://blog.sina.com.cn/s/blog_51048da70101grz6.html

http://www.debug8.com/javascript/t_9904.html

还能输出{{restrictNumber}}个字符  
  • {{reply.author}}

    {{CommonUtil.formateDate(reply.ac_CommentDate).shortTime}}
  • 回复了{{Comments.author}} :