哪种方法最准确,我选的是第二个。

如何判断一个js对象是否是Array,arr为要判断的对象,其中最准确的方法是?

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

在什么情况下用什么方法呢

阅读 2.7k
5 个回答

1.typeof一定是不准确的,因为会给你返回“object”
2.没问题,返回布尔值
3.基本没问题,但是容易被改写,不如prototype安全
4.没问题,基本很少有人去改写prototype上的属性方法

Array.isArray()在IE8以下版本不可用,用第四个方法一般肯定没问题的。

所以比较好的办法是

if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}

underscore.js使用的就是这个办法

Array.isArray([])

最后一种方法没有局限性,推荐最后一种

也就 第二种 和 最后 一种 有用
不过 我 觉得 最后 一种 好点

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