版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
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