因为typeof 机制的缘故,在对数组& 对象类型进行判断的时候,两者都返回一个object;所以此文总结一下类型判断的几种方式,来预防typeof 为我们带来的开发中的坑!
Method One:instanceOf
let arr = new Array();
let obj = {};
console.log(arr instanceOf Array); //true
console.log(arr instanceOf Object); //true
console.log(obj instanceOf Array); //false
console.log(obj instanceOf Object); //true
特别的:因为Array 也是Object 类的子类,所以arr 在对Object 的判断上也为true(在prototype链上)
Method Two:Constructor
let arr = new Array();
let obj = {};
console.log(arr.constructor === Array); //true
console.log(arr.constructor === Object); //false
console.log(obj.constructor === Object); //true
Method Three:Object.prototype.toString.call()
let arr = new Array();
let obj = {};
console.log(Object.prototype.toString.call(arr)); //[object Array]
console.log(Object.prototype.toString.call(obj)); //[object Object]
Object.prototype.toString.call()方法可以精准判断变量类型,它返回[object constructorName]的字符串格式