function isArray(arr){
return Object.prototype.toString.call(arr) == '[object Array]'
}
为什么这么判断呢
function isArray(arr){
return Object.prototype.toString.call(arr) == '[object Array]'
}
为什么这么判断呢
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,你大概明白为什么那么判断是否是数组了么?
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
唯一只有 Object 的 toString 方法,可以访问所有内置对象的 [[Class]] 属性的值 , 但是 toString 方法已经被很多对象类型覆盖了,所以你不能用 arr.toString 去判断,只能用
楼上说的
arr instanceof Array
去判断是不安全的,在一个页面有多个 iframe 的情况下,因为 Array 是 window 对象的,不同 window 对象的 Array,是不相等的。