lodash.isArray

image.png

源码就一句话
image.png

在lodash有必要为了这一句话单独弄个方法吗,直接用js自带的不就好了

阅读 4.4k
4 个回答

这个或许只是现在的代码吧。
猜测有可能以前不是这样的,比如以前还没有isArray这个函数的时候,lodash实现了,后来浏览器广泛支持了Array.isArray或者babel本身能够转译了,lodash才移除了原有实现,并且为了兼容旧项目中的lodash.isArray,保留了这个函数。


特意查看了一下lodash的历史版本,版本0.1.0中isArray实现如下:

var nativeIsArray = Array.isArray
var arrayClass = '[object Array]'
var isArray = nativeIsArray || function isArray(value) {
  return toString.call(value) == arrayClass;
};

Array.isArray不是自带的,低版本浏览器没这个方法

反对楼上所有说是为了兼容的问题。

Array.isArray 是 ES5 引入的,发布于 2009 年;Lodash 第一个 RC 版 0.1.0 发布于 2013 年。到底谁兼容谁?

明明是出于方法命名的一致性考虑。

当你代码里都是 _.isBoolean()_.isDate()_.isNumber()_.isString() 的时候,当然 _.isArray() 写起来更顺一些。

查了下lodash源码里isArray的实现:

  1. v3.10.1:

    var isArray = nativeIsArray || function(value) {
          return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
        };
  2. v4.17:

    var isArray = Array.isArray;

说明一开始lodash提供的是兼容的API isArray,后来把兼容代码去掉了,但是API isArray不能删啊,就造成了现在的样子了。

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