js判断类型 是否是数组Array

初次遇到这个问题的时候,我当机立断的写下了 typeof a == array;
然而实际上这是错误的,typeof array的结果是object,typeof object的结果也是object。那么我们如何判断一个变量是否是数组那?
1. instanceof

var a = {
    "name":'suonidfahao',
    "job": 'webEnginner',
}   
var b = [1,2,4,4];
console.log(a instanceof Array); //false
console.log(b instanceof Array); //true

instanceof详解请见:http://blog.csdn.net/qq_33619285/article/details/70142527


2.Array.isArray(ie9以上支持)

Array.isArray([1, 2, 3]);  // true
Array.isArray({foo: 123}); // false
Array.isArray('foobar');   // false
Array.isArray(undefined);  // false

3.原型链:constructor

var list = [1,2,3,4,5];
console.log(list.constructor === Array); //true

为什么 array.constructor 就等于 Array那?
我们换一种方式创建数组就明了;

var mylist = new Array(1,2);                                                     
// 所以有:                                                                          
console.log( mylist.__proto__ === Array.prototype )                              
// 所以有:                                                                          
console.log( mylist.__proto__.constructor === Array.prototype.constructor );     
// 所以有:                                                                          
console.log( mylist.__proto__.constructor === Array );                           
// 所以有:                                                                          
console.log( mylist.constructor === Array );                                     

4.array特征

function isArray(obj){                                                                 
    return obj && //排除 null , undefined                                                
           typeof obj ==='object' && //排除number, string,boolean                        
           obj.propertyIsEnumerable(length); //排除object                                

            //此处是 length 不是"length",没有引号                                               
            //当obj={length:22,.....}时,obj.propertyIsEnumerable("length")为true,         
            //但是obj.propertyIsEnumerable(length)依然是false;                              
}                                                                                      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值