javascript中判断一个对象是否是数组的几种方法

    var obj1={};
    var obj2=[1,2,3];
    var obj3=function(){};
    var obj4={}; obj4.__proto__=[];


    1、isPrototypeOf 不但检查直接父对象,而且检查整个原型链
  

 console.log(Array.prototype.isPrototypeOf(obj1));//f
 console.log(Array.prototype.isPrototypeOf(obj2));//t
 console.log(Array.prototype.isPrototypeOf(obj3));//t
 console.log(Array.prototype.isPrototypeOf(obj4));//t

    2、instanceof 可检查整个原型链 判断是不是构造函数的实例
    

    console.log(obj1 instanceof Array);
    console.log(obj2 instanceof Array);
    console.log(obj3 instanceof Array);
    console.log(obj4 instanceof Array);


    3、constructor 可检查整个原型链

    console.log(obj1.constructor==Array);
    console.log(obj2.constructor==Array);
    console.log(obj3.constructor==Array);
    console.log(obj4.constructor==Array);


    4、调用原生toString()方法访问对象内部的class属性
    call(替代this对象) call做2件事1、执行函数2、替换this
    此方法判断对象是不是数组是用的最多的也是最严格的 
    class值记录创建时的类型

    console.log(Object.prototype.toString.call(obj1)=="[object Array]");
    console.log(Object.prototype.toString.call(obj2)=="[object Array]");
    console.log(Object.prototype.toString.call(obj3)=="[object Array]");
    console.log(Object.prototype.toString.call(obj4)=="[object Array]");
 /**
 * Returns internal [[Class]] property of an object
 *
 * Ecma-262, 15.2.4.2
 * Object.prototype.toString( )
 *
 * When the toString method is called, the following steps are taken: 
 * 1. Get the [[Class]] property of this object. 
 * 2. Compute a string value by concatenating the three strings "[object ", Result (1), and "]". 
 * 3. Return Result (2).
 */
function __getClass(object){
 return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];
};
var ary = new Array();
var x = __getClass(ary);
//var reg=/[0-9]{1}/;
//var x = __getClass(reg);//RegExp
console.log(x);


    5、Array.isArray(obj)方法 ECMA5新标准 旧的浏览器不支持的话就添加

    console.log(Array.isArray(obj1));
    console.log(Array.isArray(obj2));
    console.log(Array.isArray(obj3));
    console.log(Array.isArray(obj4));

 

转载于:https://my.oschina.net/wangch5453/blog/674346

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页