判断数组还是对象方法

在面试契约锁时,问到了如何判断数组还是对象,只回答了ES6中的isArray()方法,当面试官继续提示我原型链上的方法时,我也想不起来,记录一下。

1.typeof

typeof可以判断基本数据类型,但是引用数据类型其实都是object,所以是判断不出数组还是对象的

let num=1;
console.log(typeof num)       //number
let str="222";
console.log(typeof str)       //string
console.log(typeof null)      //object
console.log(typeof undefined) //undefined
console.log(typeof NaN)       //number

2.使用Array.isArray()

let obj={}
let arr=[]
console.log(Array.isArray(obj)) //false
console.log(Array.isArray(arr)) //true

3.判断构造函数

通过原型链可知,函数对象都有prototype指向一个显示原型,显示原型上有一个constructor可以指回函数。

obj 是new Object函数构造出来的

arr是new Array函数构造出来的

let obj={}
let arr=[]
console.log(obj.constructor()) // {}
console.log(arr.constructor()) //[]

4.通过实例instanceof可以判断是不是实例对象

let obj={}
let arr=[]
console.log(obj instanceof Array)  //false
console.log(arr instanceof Array)  //true
console.log(obj instanceof Object) //true
console.log(arr instanceof Object) //true

5.Object.prototype.toString.call()

let obj={}
let arr=[]
console.log(Object.prototype.toString.call(obj))  //[object Object]
console.log(Object.prototype.toString.call(arr))  //[object Array]

猜你喜欢

转载自blog.csdn.net/weixiwo/article/details/129487631