JavaScript如何判断一个变量是数组还是对象

target instanceof type

注意:不可以用typeof,因为除了原始类型和function以外,全都是object。(包括null) ; 不要用Object来测试,因为Array属于object的子类 

var a = {}
var b = []

// 【注意】不要用Object来测试,因为Array属于Object的子类
console.log(a instanceof Array) //false
console.log(b instanceof Array) //true

target.constructor

由于每个实例会继承原型的属性,而原型的constructor属性会指向自己的构造函数 ;可以显示出自定义的类

var a = {}
var b = []

console.log(a.constructor) // [Function: Object]
console.log(b.constructor) //[Function: Array]

Object.prototype.toString.call(target)

1、每个object会自带一个默认的toString的函数,用来打印该对象的类型

2、但是也可能有的自定义对象会重写toString,因此,从原本的object原型调用,再通过call调用更换this环境

3、无法显示自定义的类,都会显示Object

var a = {}
var b = []

console.log(Object.prototype.toString.call(a)) // [object Object]
console.log(Object.prototype.toString.call(b)) // [object Array]

转自:https://www.wolai.com/mary/rPktXJ2xocawfXnX1vqTeD

猜你喜欢

转载自blog.csdn.net/wanghongpu9305/article/details/114127251