js 判断是否数组

function isArray(arr){
    return Object.prototype.toString.call(arr) == '[object Array]'
}

为什么这么判断呢

阅读 5.7k
6 个回答

唯一只有 Object 的 toString 方法,可以访问所有内置对象的 [[Class]] 属性的值 , 但是 toString 方法已经被很多对象类型覆盖了,所以你不能用 arr.toString 去判断,只能用

// 这种判断是最安全的
Object.prototype.toString(arr) 

楼上说的 arr instanceof Array 去判断是不安全的,在一个页面有多个 iframe 的情况下,因为 Array 是 window 对象的,不同 window 对象的 Array,是不相等的。

这个话题要扯就扯得太深远了,可以去知乎啊,百度啊啥的查查……一般情况下用这个就行了

bool isArray = Array.isArray(obj)

JS中不存在真正的数组,它不像C语言中那样具有内存的连续性、不可变长等特性。
JS中的数组你可以理解为一个map,key就是数字,所以你可以自己实现一个对象伪装成数组:

var a = {};
a[0] = 0;
a[1] = 1;
a.length = 2;

// 甚至你也可以添加一些方法...
a.push = function(item) {
  a[++a.length] = item;
};

So,你大概明白为什么那么判断是否是数组了么?

也可以

arr instanceof Array

来判断

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

引入lodash,然后使用_.isArray(value)进行判断

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题