lodash.js和underscore.js有什么区别呢?

文章来源自stack overflow,Brian M.Hunt提出的问题,问题的内容是比较lodash.js和underscore.js的区别。本文节选了得票数最高的回答者(也就是发明Lo-Dash本人)进行翻译,希望能帮助你了解这两个组件的差别。
如果有任何侵权行为,请告知我:aleenli1992@gmail.com

原问题:

为什么有些人想对于其他的实用库来讲,更青睐于lodash.js或underscore.js呢?

lodash看起来就像是underscore的替代品而已,而后者已经存在了很长时间了。

我觉得它们都是伟大的库,但是对于它们如何进行工作,我还不是足够的了解和有根据的比较,而且我还想知道更多关于二者的不同。

回答者:

我利用Lo-Dash去提供支持数组,字符串,对象和arguments对象更多一致的跨域迭代,他已经成为了underscore.js的一个超级集合,提供了更多一致的API接口,更多原型(比如AMD的支持,深拷贝和底层合并),更全面的文档和单元测试(测试可以运行在Node,Ringo,Rhino,Narwhal,PhantomJS,和浏览器上),更加完美的表现,和对大型的的数组/对象的迭代,和更加弹性的自定义构建和实用的预编辑模版。

因为Lo-Dash相对于Underscore更频繁的升级,一个lodash underscore 的构建,是为了确保最新的和稳定版本下,underscore的兼容性。

有一次,我甚至得到了修改underscore的访问权限,有一部分原因是因为Lo-Dash收集和解决了至少30条问题,登陆错误的修复,新的特征,更丰富的收益都在underscore v1.4x+.

其次,默认情况下,至少有3个Backbone线程包括了Lo-Dash并且在Backbone的官方文档中也提到了Lo-Dash。

去看看Kit Cambridge‘s写的这篇文章,Say “Hello” to Lo-Dash,一篇对Lo-Dash和Underscore的不同进行了更深更透彻的分析。

补充说明:
  1. Underscore在新的浏览器上对数组,字符串,对象和arguments对象的支持有些反常,Object模块对参数对象的迭代,字符串被处理成了类数组,对象(对“toString”和“valueOf”的迭代非常糟糕的执行)和函数(忽视它们的“prototype”特性)的迭代方法的正确性,不过在老的浏览器并不发生这样的状况,此外,Underscore方法中的类似于_.clone会保护着holes in arrays,不过其他像_.flatten则不会。