Hi FE !
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
  • Arr006-判断是否是数组的几种方法

Arr006-判断是否是数组的几种方法

1.Object.prototype.toString.call()

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

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]"

2. instanceof

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

[] instanceof Array //true
var x={}
x instanceof Array //false
x.__proto__=Array.prototype
x instanceof Array //true

instanceof 算法机制

    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()优于 instanceof 的地方在于:Array.isArray()可以检测 iframes

Array.isArray()与Object.prototype.toString.call() Array.isArray()是es6新增的语法,当不存在Array.isArray()方法时,可以用Object.prototype.toString.call()实现,Array.isArray()的polyfill 通常如下

if(!Array.isArray){
  Array.isArray=function(arr){
  return Object.prototype.toString.call(arr)==='[object Array]';
  }
}
Edit this page
最近更新: 2025/6/27 02:24
Contributors: qdleader
qdleader
本站总访问量 129823次 | 本站访客数 12人