在看javascript高级程序设计,里面讲到了怎么来判断一个变量的数据类型的方法,我总是用混,现在总结一下,希望对大家也会有帮助。
1.typeof
typeof是操作符,不是函数。其返回的是一个字符串。返回值有五种:
“undefined”//表明操作数是undefined
"number"//表明操作数是Number类型的数
“boolean”//表明操作数是Boolean类型的数
“string”//表明操作数是String类型的数
“object”//表明操作数是null或者Object类型的数
“function”//表明操作数是Function类型的数
2.instanceof
如果是引用类型的数值,如Array,Date,RegExp这些值使用typeof得出的类型都是object,那就不能使用typeof来准确判断引用类型。那么如何判断是否为Array或者Date,RegExp类型呢,instanceof可以判断。instanceof 不能判断Null类型和Undefined类型的值,会报错。
var arr=['1','3'];
typeof arr;//object
arr instanceof Array;//true
3.[Object].constructor
此类方法也可以准确判断出引用类型的值的数据类型,也可以判断出基本类型数值的数据类型。此方法也不能判断Null和Undefined类型的值,也会报错。
4.Object.prototype.toString.call();
这种方法可以判断所有的类型值,只不过在返回的字符串中都是“[object ]”后再加上值的数据类型。
Object.prototype.toString.call(0)//"[object Number]"
Object.prototype.toString.call(undefined)//"[object Undefined]"
Object.prototype.toString.call(null)//"[object Null]"
Object.prototype.toString.call('222')//"[object String]"
Object.prototype.toString.call([1,2,'3',])//"[object Array]"
Object.prototype.toString.call(function(){})//"[object Function]"
Object.prototype.toString.call(new Date(2001,2,4))//"[object Date]"
这是我总结的判断数值数据类型的方法,如果大家还有什么好的建议,可以一起交流学习。