判断类型,首先会想到使用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只能区分原始类型(numberstringundefinedboolnull)和函数(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);