js如何判断一个对象是不是Array?
怎样判断一个对象是不是数组?
先上方法(确定的方法有两种)
- 根据对象的class属性来判断,跨原型链调用toString()方法。 Object. prototype.toString.call(obj)===[ object Array]
- 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 操作符可以来表示实例是否属于某个构造函数创建的。
这种方法有一个问题,就是验证不够严格。 即使对象创建时不是使用数组创建的,但是只要原型链上有数组类型,也认为是数组,亦或者,即便创建时是数组创建,但其原型上有对象类型,便不再被认为是数组。
文章未经允许,一律不得转载,如需转载,务必标明原文出处。