面试:数组的判断方法?

482 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前言

数组是日常开发过程中必不可少的一种数据类型,如何去判断该数据类型是数组也是一个至关重要的环节。面试中,这也是一个常常会被问到的题目,如何快速的回答面试官的问题,下面就让我们快速罗列一下...

Array.isArray()

如果对象是 Array ,则返回true,否则为false

Array.isArray([1, 2, 3]);
// true
Array.isArray({foo: 123});
// false
Array.isArray("foobar");
// false
Array.isArray(undefined);
// false

arr instanceof Array

instanceof 运算符用于检测构造函数prototype 属性(constructor.prototype)是否出现在某个实例对象的原型链上。

const arr = [1, 2];
arr instanceof Array  
// true

Array.prototype.isPrototypeOf()

isPrototypeOf()  方法用于测试一个对象是否存在于另一个对象的原型链上。

isPrototypeOf() 与 instanceof 运算符不同。在表达式 "object instanceof AFunction"中,object 的原型链是针对 AFunction.prototype 进行检查的,而不是针对 AFunction 本身

arr.constructor === Array

判断对象的构造函数是否是数组。

constructor 是一种用于创建和初始化class创建的对象的特殊方法。如果我们判断该对象的构造函数就是Array,那就是说该对象可以通过数组的构造函数(Array)创建得到,也就说明它是数组了。

Object.getPrototypeOf(arr) === Array.prototype

Object.getPrototypeOf(object) 方法返回指定对象的原型。

如果对象的原型是数组原型(Array.prototype),也可以确定对象就是数组。

Object.prototype.toString.call(arr) === '[object Array]'

toString()  方法返回一个表示该对象的字符串。

每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString() 方法被每个 Object 对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中 type 是对象的类

结语

如果这篇文章帮到了你,欢迎点赞👍和关注⭐️。

文章如有错误之处,希望在评论区指正🙏🙏。

参考:

isPrototypeOf

GetPrototypeOf