JS判断一个对象是不是数组的方法

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表示当前数据类型。

修改判断对象的原型并未对结果产生影响。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值