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
发表评论: