您的位置:首页 > Web前端 > JavaScript

js最全判断对象是不是数组类型的7种方法

2020-02-03 02:06 405 查看

1. 判断对象的原型对象与数组的原型对象是否相等

var obj1={};
var obj2=[1,2,3]
var obj3=new  Date()
//  判断原型对象是否相同
console.log(obj1.__proto__===Array.prototype)// false
console.log(obj2.__proto__===Array.prototype)// true
console.log(obj3.__proto__===Array.prototype)// false

2.因为__proto__可能被浏览器禁用可用一个函数来代替

var obj1={};
var obj2=[1,2,3]
var obj3=new  Date()
//  用函数获取对象的原型对象
console.log(Object.getPrototypeOf(obj1)===Array.prototype)// false
console.log(Object.getPrototypeOf(obj2)===Array.prototype)//true
console.log(Object.getPrototypeOf(obj3)===Array.prototype)//false

3.更直接的一种函数判断

var obj1={};
var obj2=[1,2,3]
var obj3=new  Date()
//  原型对象里有一个方法
console.log(Array.prototype.isPrototypeOf(obj1),
Array.prototype.isPrototypeOf(obj2),
Array.prototype.isPrototypeOf(obj3)
) //输出结果 false  true  false

4. 判断子对象的构造函数是不是Array

var obj1={};
var obj2=[1,2,3]
var obj3=new  Date()
//  判断子对象的构造函数是不是Array
console.log(obj1.constructor==Array,
obj2.constructor==Array,
obj3.constructor==Array)
// false  true  false

注意: 这里子对象的constructor 是继承父对象的constructor 并不是子对象里面有的

5. 用instanceof 判断

var obj1={};
var obj2=[1,2,3]
var obj3=new  Date()
//   对象是不是Array 的一个实例 返回值是布尔值
console.log(obj1 instanceof  Array)
console.log(obj2 instanceof  Array)
console.log(obj3 instanceof  Array)

6. 查找对象的class 属性

var obj1={};
var obj2=[1,2,3]
var obj3=/\d/
//   判断对象的class 属性   这个在Object的原型对象 的toString()的第二个参数就是这个对象刚开始的类型
//     一定要加call  不加了 因为每个对象的构造函数重写过toString()
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])

// 判断对象的class 属性 这个在Object的原型对象 的toString()的第二个参数就是这个对象刚开始的类型
// 一定要加call 不加了 因为每个对象的构造函数重写过toString()
call 的原理是啥 替换Function原型对象中toString中的this 原本指的 Object 的实例 现在被转换成你所要检测的对象 因为原型对象中的toString() 返回的第二个参数就是对象的class属性 这是对象刚出生就定义的

7. 用Array.isArray() 判断

var  obj1=[1,2,3,4]
var obj2={}
console.log(Array.isArray(obj1))//true
console.log(Array.isArray(obj2))//false
  • 点赞
  • 收藏
  • 分享
  • 文章举报
前端阿飞 发布了22 篇原创文章 · 获赞 3 · 访问量 1341 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: