谈一下instanceof、Array.isArray、Object.prototype.toString.call()判断数组的区别和优劣

1.instanceof

使用instanceof判断数组,instanceof会判断这个对象的原型链上是否会找到对应的Array的原型,找到则返回true,否则返回false;

   [] instanceof Arrary      // true

缺点:instanceof 只能判断对象,原始类型不可以, 并且所有对象类型 instanceof Object 都返回true


instanceof.png
2. Array.isArray

当检测Array实例时,Array.isArray 优于 instanceof
其内部原理是基于Object.prototype.toString.call()

    Array.isArray = function(value) {
      return Object.prototype.toString.call(value) === '[object Array]';
    }
3. Object.prototype.toString.call()

任何数据类型的原型最终指向Object, Object的最终指向null。
Object有一个内置方法toString, 通过call()方法可以判断任何数据类型, symbol也可以

let s = Symbol(2)
Object.prototype.toString.call(s)  // "[object Symbol]"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容