Javascript: N种方法判断一个变量是否是数组

Array.isArray()

IE9+,非常普遍的用法,比如{a: '1'},Array.isArray({a: '1'})返回false

variable.constructor === Array

变量是由Array构造函数生成的数组,寻找变量的构造函数...

[1,2,3] instanceof Array

返回一个布尔值,顺便提一下,instanceof这个方法判断基本数据类型是会失效的,比如 1 instanceof Number为假,'2' instanceof String为假,但是如果这样处理:

const a = new Number(2);
a instanceof Number     // true
复制代码

随便找一个数组仅有的方法

可能有人有疑问,2..sort或者'2'.sort会不会报错,其实是不会的,但是ture.sort会不起反应,所以最优的做法是:

typeof variable === 'object' && variable.sort === Array.prototype.sort
复制代码

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

基本全支持,这个是惯常的用法,非常准确

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

IE9+,这也是个方法,但是需要注意,在 ES5 中,如果参数不是一个对象类型,将抛出一个TypeError异常。在 ES2015 中,参数会被强制转换为一个 Object:

Object.getPrototypeOf('foo');
// TypeError: "foo" is not an object (ES5 code)
Object.getPrototypeOf('foo');
// String.prototype                  (ES2015 code)
复制代码

Array.prototype.isPrototypeOf(variable)

这样真的可以,而且基本全支持,Object.isPrototypeOf() 方法用于测试一个对象是否存在于另一个对象的原型链上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值