判断一个数据是否为数组

怎么判断一个数据是不是数组呢?

其实这个也是一个常考的题目。在面试的过程中,更是一个高频的面试题

1、数组方法 isArray()

Array.isArray(variable);

这是js的一个方法,专门用来测试对象是否是Array类型
举例:

在这里插入图片描述
由例子可知,此方法是即为便利的,直接就能对数据的类型进行判断。

2、原型 prototype + toString + call

Object.prototype.toString.call(variable).indexOf(‘Array’) !== -1;

Object.prototype.toString.call() 使用了 toString方法,所以返回值是一个字符串

var arr = [1,2]
var obj = {a:1}
Object.prototype.toString.call(arr)  //"[object Array]"
Object.prototype.toString.call(obj)  //"[object Object]"

所以要使用 indexOf() 来进行二次判断,看返回值有没有 Array这个关键字

Object.prototype.toString.call(arr).indexOf('Array')   // 8
Object.prototype.toString.call(arr).indexOf('Object')  // -1

Object.prototype.toString.call(arr).indexOf('Array') !==-1  //true
Object.prototype.toString.call(arr).indexOf('Object') !==-1 //false

这个方法比之 第一种,稍显麻烦一些,但是也是可以精确判断是否为数组

3、构造函数 constructor

variable. _ proto _ .constructor.name

这种方法,与使用原型的方法类似。话不多说,直接上代码,上图:

var arr = [1,2,3,4]
var obj = {a:1,b:2}
console.log(arr)
console.log(obj)

打印日志如下:
数组
在这里插入图片描述
对象
在这里插入图片描述
由图片可知道,在constructor下面有一个name属性,值就是当前数据的类型
所以,可以依照以下的代码判断数据的类型

obj.__proto__.constructor.name
arr.__proto__.constructor.name

在这里插入图片描述

4、instanceof

variable instanceof Array
当 variable 为 Array 的直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。

var obj = {a:1}
var arr = [1,2,3]
obj instanceof Array  // fasle
arr instanceof Array  // true
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值