1.获取当前对象的隐式原型,判断是否全等于Array的原型。
2.判断当前函数是不是由Array这个函数构造的。
3.判断当前函数的constructor属性是否指向Array。
4.数组API,Array.isArray
5.利用Object中的toString()方法,该方法在所有原型中被重写,返回[object type],type为该对象数据类型(最稳定的方法)。
一.获取当前对象的隐式原型,判断是否全等于Array的原型。
var a = {}
var b = []
var c = {}
// 将c的原型设置为b的隐式原型
Object.setPrototypeOf(c, b.__proto__)
console.log(Object.getPrototypeOf(a) === Array.prototype);//flase
console.log(Object.getPrototypeOf(b) === Array.prototype);//true
console.log(Object.getPrototypeOf(c) === Array.prototype);//true
由结果可知该方法并不稳定,在修改c的原型之后,判断结果为true。
二.判断当前函数是不是由Array这个函数构造的。由结果可知改方法并不稳定,在修改c的原型之后,判断结果为true。
var a = {} var b = [] var c = {} // 将c的原型设置为b的隐式原型 Object.setPrototypeOf(c, b.__proto__) console.log(a instanceof Array);//false console.log(b instanceof Array);//true console.log(c instanceof Array);//true
由结果可知该方法并不稳定,在修改c的原型之后,判断结果为true,对判断结果产生了影响。
三.判断当前函数的constructor属性是否指向Array。
var a = {}
var b = []
var c = {}
// 将c的原型设置为b的隐式原型
Object.setPrototypeOf(c, b.__proto__)
console.log(a.constructor === Array);//false
console.log(b.constructor === Array);//true
console.log(c.constructor === Array);//true
同样,在修改c的原型之后该方法结果同样出现错误。
四.借用数组API(Array.isArray)
var a = {}
var b = []
var c = {}
// 将c的原型设置为b的隐式原型
Object.setPrototypeOf(c, b.__proto__)
console.log(Array.isArray(a));//false
console.log(Array.isArray(b));//true
console.log(Array.isArray(c));//false
在对c的原型设置为b的隐式原型之后,并未对判断结果产生影响。
五.Object中的toString()方法
var a = {}
var b = []
var c = {}
// 将c的原型设置为b的隐式原型
Object.setPrototypeOf(c, b.__proto__)
console.log(Object.prototype.toString.call(a));//[object Object]
console.log(Object.prototype.toString.call(b));//[object Array]
console.log(Object.prototype.toString.call(c));//[object Object]
改方法在所有对象中被重写,返回[objcet type] type表示当前数据类型。
修改判断对象的原型并未对结果产生影响。