判断类型,首先会想到使用typeof来判断
就以typeof来测试一下
var num=1,
str="字符串",
bool=true,
undefined,
nu=null;
var func=function(){};
var obj0={};
var obj1=[];
console.log(
typeof num,//number
typeof str,//string
typeof bool,//boolean
typeof undefined,//undefined
typeof nu,//object
typeof func,//function
typeof obj0,//object
typeof obj1//object
);
经测试,typeof只能区分原始类型(number、string、undefined、bool、null)和函数(function)和引用类型对象(object) ,无法进一步区分object中不同对象的类型,只要是引用类型,使用typeof都一致认为属于object
得出结论:typeof不能用来判断数组
下面举例4种判断数组的方法
一、判断原型对象
//判断Array是不是arr的父对象
Array.prototype.isPrototypeOf(arr);
二、判断构造函数
//判断arr是不是用Array创建出来的,obj是否为Array的实例
arr instanceof Array;
三、检查内部属性class(最严格)
//多态问题:arr的原型对象为Array,默认使用Array的toString,达不到所需要的。
//解决:利用call方法强行把arr的默认toString方法换成Object原型对象的toString方法
//判断arr的内部class是否为object Array
Object.prototype.toString.call(arr)=="[object Array]";
四、ES5方法
Array.isArray(arr);