js如何判断一个对象是不是Array?

js如何判断一个对象是不是Array?

 

怎样判断一个对象是不是数组?

先上方法(确定的方法有两种)

  1. 根据对象的class属性来判断,跨原型链调用toString()方法。  Object. prototype.toString.call(obj)===[ object Array]
  2. Array.isArray直接判断   Array. isArray(obj)。

补充:

  • 推荐文章:为什么用Object.prototype.toString.call(obj)检测对象类型

    toString为Object的原型方法,返回一个用来描述该对象的字符串,所以可以调用对象原型方法toString()来探明对象的信息。
    那么原型方法怎么调用呢,利用call,将其this指向需要判断的对象, 就可以用toString()方法了。
    let arr=[1,2,3];
    console.log(Array.prototype.hasOwnProperty("toString"));//true
    console.log(arr.toString());//1,2,3 arr作为对象Object的实例,重写了toString()方法。
    delete Array.prototype.toString;//delete操作符可以删除实例属性
    console.log(Array.prototype.hasOwnProperty("toString"));//false
    console.log(arr.toString());//"[object Array]" 
    // 由于删除了实例对象中的toString()方法,找不到,顺着原型链往上走,就调用了对象Object的方法,返回的结果就和Array.prototype.toString(arr)一样的。
  • 根据构造函数来判断 instanceof 操作符可以来表示实例是否属于某个构造函数创建的。

这种方法有一个问题,就是验证不够严格。 即使对象创建时不是使用数组创建的,但是只要原型链上有数组类型,也认为是数组,亦或者,即便创建时是数组创建,但其原型上有对象类型,便不再被认为是数组。

推荐文章

文章未经允许,一律不得转载,如需转载,务必标明原文出处。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值