前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >判断数组的方法,请分别介绍它们之间的区别和优劣

判断数组的方法,请分别介绍它们之间的区别和优劣

作者头像
刘嘿哈
发布2022-10-25 14:15:14
2810
发布2022-10-25 14:15:14
举报
文章被收录于专栏:js笔记
1.Object.prototype.toString.call()

Object.prototype.toString.call(任意类型的值),返回一个字符串 '[object 类型]',这种方法对所有数据类型都能判断,即使是null或者undefined;

代码语言:javascript
复制
Object.prototype.toString.call('An') // "[object String]"
Object.prototype.toString.call(1) // "[object Number]"
Object.prototype.toString.call(Symbol(1)) // "[object Symbol]"
Object.prototype.toString.call(null) // "[object Null]"
Object.prototype.toString.call(undefined) // "[object Undefined]"
Object.prototype.toString.call(function(){}) // "[object Function]"
Object.prototype.toString.call({name: 'An'}) // "[object Object]"
instanceof

instanceof的内部机制是判断目标对象的原型链是不是能找到prototype. 使用instanceof判断一个对象是不是数组,instanceof会判断这个对象的原型链上有没有数组的原型,找到就返回true,否则返回false

代码语言:javascript
复制
[] instanceof Array //true
var x={}
x instanceof Array //false
x.__proto__=Array.prototype
x instanceof Array //true

instanceof 算法机制

代码语言:javascript
复制
    function instance_of(L,R){
        var O=R.prototype;
        L=L.__proto__;
        while(true){
            if(L===null){
                return false;
            }
            if(O===L){
                return true;
            }
            L=L.__proto__;
        }
    }
3.Array.isArray()
  • 功能主要是判读是否是数组 Array.isArray()与Object.prototype.toString.call() Array.isArray()是es6新增的语法,当不存在Array.isArray()方法时,可以用Object.prototype.toString.call()实现,Array.isArray()的polyfill 通常如下
代码语言:javascript
复制
if(!Array.isArray){
  Array.isArray=function(arr){
  return Object.prototype.toString.call(arr)==='[object Array]';
  }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Object.prototype.toString.call()
  • instanceof
  • 3.Array.isArray()
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档