考虑类型检测,首先我们先巩固一下JS的六种数据类型:
1)原始类型:number、string、boolean、undefined、null (五种)
2)对象:object( Function、Array、Date...)
类型检测包括:typeof instanceof
typeof (适合基本类型和函数,遇到null失效)
var Circle=function(){
var obj=new Object();
obj.PI=3.14159,
obj.area = function( r ) {
return this.PI * r * r;
}
return obj;
};
console.log(typeof 100);
console.log(typeof true);
console.log(typeof Circle);
console.log(typeof undefined);
console.log(typeof new Object());
console.log(typeof [1 ,3]); //对于引用类型数组等都是返回object
console.log(typeof NaN); //特殊的number
console.log(typeof null); //返回的object,是历史原因造成的,为了兼容性
number
boolean
function
undefined
object
object
number
object
instanceof判断自定义的对象,但是需要注意:不同的window或iframe间的对象类型检测不能使用instanceof,使用typeof可以跨帧使用。
console.log([1,3] instanceof Array ); //true
console.log(new Object() instanceof Array ); //false
Object.prototype.toString.apply( 检测对象 )
console.log(Object.prototype.toString.apply( [] ) );
console.log(Object.prototype.toString.apply( Circle) );
console.log(Object.prototype.toString.apply( null) );
console.log(Object.prototype.toString.apply( undefined) );
[object Array]
[object Function]
[object Null]
[object Undefined]
通过{}.toString拿到的类型检测适合内置对象和基元类型。
除了上面三种,还有construtor和duck type两种。