数据类型判断
数据类型判断有以下几种方式
typeof、instanceof、constructor、Object.prototype.toString.call()、jquery.type()
1.typeof() 基本数据类型中:对于基本数据类型的判断是没有问题的。
另:用typeof检测构造函数创建的Number,String,Boolean都返回的是对的数据类型
基本数据类型中:null,引用数据类型中的:Array,Object,Date,RegExp。不可以用typeof检测。都会返回小写的object
但是遇到引用数据类型是不起作用的。都会返回小写的object
示例
2.instanceof
除了使用typeof来判断,还可以使用instanceof。instanceof运算符需要指定一个构造函数,或者说指定一个特定的类型,它用来判断这个构造函数的原型是否在给定对象的原型链上(不考虑 null(空) 和 undefined(未定义))。
基本数据类型中:Number,String,Boolean。字面量值不可以用instanceof检测,但是构造函数创建的值可以,如下:
还需要注意null和undefined都返回了false,这是因为它们的类型就是自己本身,并不是Object创建出来它们,所以返回了false。
3.constructor(除了undefined和null之外,其他类型都可以通过constructor属性来判断类型。)
constructor用来判断数据的构造函数的类型,但是对于继承类型的数据有可能会出错,解决办法是将constructor重新赋值原来数据的构造函数类型 a.constructor=Array
如果输出一个类型的实例的constructor,就如下所示:
可以看到它指向了Number的构造函数,因此,可以使用num.constructor==Number来判断一个变量是不是Number类型的。
4.使用Object.prototype.toString.call()检测对象类型
可以通过toString() 来获取每个对象的类型。为了每个对象都能通过 Object.prototype.toString() 来检测,需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式来调用,传递要检查的对象作为第一个参数,称为thisArg。
这样可以看到使用Object.prototype.toString.call()的方式来判断一个变量的类型是最准确的方法
5.无敌万能的方法:jquery.type()
如果对象是undefined或null,则返回相应的“undefined”或“null”
6.自己也可以封装一个获取变量准确类型的函数