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

本文介绍了JavaScript中使用多种方法来检测变量是否为数组的技巧,包括使用isPrototypeOf、instanceof、constructor、toString及Array.isArray等方法,并对每种方法进行了详细的解释和示例演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值