判断数组的方法?
const arr = []
Array.isArray(arr)
Object.prototype.toString.call(arr) === '[object Array]'
toString.call(arr) === '[object Array]'
arr instanceof Array
arr.constructor===Array
- ES6 新增的
isArray方法 - 通过
Object类型的副属性 class 判断 - 判断是否在
Array的原型链上 - 判断
constructor是不是Array
toString 不是对象原型链上的方法吗,为什么可以直接 toString()
而常量是没有方法的,为什么能够调用方法呢?答案是这样的,五种基本类型除了 null、undefined ` 以外都有与之对应的特殊的引用类型——包装类型。当代码被解释执行时,底层会对基本类型做一个类型转换,即将基本类型转换成引用类型,这样就可以调用相应引用类型有权访问到的方法。
isArray 其实就是方法二的一种封装,所以总结下 通过 原型链、构造函数和 Object 副属性三种方法判断
说到这里,我去写下如何判断各种类型。