知向前端
js数据类型判断的几种方法总结
2015-6-9 Jon


js数据类型判断的几种方法总结

  首先定义一组变量:




var a = "zifuchuan",

    b = 100,

    c = true,

    d,

    e = [1,2,3],

    f = new Date(),

    g = function(){alert(1)},

    h = {},

    i = null;









1,最常见的判断方法:typeof

可判断类型(6种):number、 string、 boolean、 undefined、 object、 function

返回值(数据类型)

  举例:




console.log(typeof a);  //string

console.log(typeof(a)); //string

console.log(typeof b);  //number

console.log(typeof c);  //boolean

console.log(typeof d);  //undefined

console.log(typeof e);  //object

console.log(typeof f);  //object

console.log(typeof g);  //function

console.log(typeof h);  //object

console.log(typeof i);  //object

其中typeof返回的类型都是字符串形式,需注意,例如:

alert(typeof a == "string")  //true

alert(typeof a == String)    //false








2,判断已知对象类型的方法: instanceof

后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支(若判断基本类型,借返回 false)。

可判断类型:数组、 日期、 对象

返回值(boolean)

  举例:








console.log(a instanceof Object);   //false

console.log(b instanceof Number);   //false

console.log(c instanceof Boolean);  //false

console.log(d instanceof Object);   //false

console.log(e instanceof Object);   //true

console.log(e instanceof Array);    //true

console.log(f instanceof Date);     //true

console.log(g instanceof Function); //true

console.log(h instanceof Object);   //true

console.log(i instanceof Object);   //false








3,接下来我们就用到另外一个利器:Object.prototype.toString.call

这是对象的一个原生原型扩展函数,用来更精确的区分数据类型。通用但稍繁琐的方法

大小写不能写错




var gettype=Object.prototype.toString;

console.log(gettype.call(a));       //[object String]

console.log(gettype.call(b));       //[object Number]

console.log(gettype.call(c));       //[object Boolean]

console.log(gettype.call(d));       //[object Undefined]

console.log(gettype.call(e));       //[object Array]

console.log(gettype.call(f));       //[object Date]

console.log(gettype.call(g));       //[object Function]

console.log(gettype.call(i));       //[object Null]

console.log(gettype.call(a)==='[object String]');     //true

console.log(gettype.call(e)==='[object Array]');      //true









4,根据对象的constructor判断: constructor

只能判断对象类型,和instanceof相似,但没有instanceof常用




console.log(e.constructor === Array)     //true

console.log(f.constructor === Date)      //true

console.log(g.constructor === Function)  //true

console.log(h.constructor === Object)    //true





注意: constructor 在类继承时会出错(不会继承父类的)

解决方法:让父类赋值给当前对象的constructor

发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容