骆驼祥子和下划线的区别

为什么有人喜欢lodash.jsunderscore.js这两个实用程序库而不是另一个?

Lodash似乎是underscore的替代品,后者存在的时间更长。

我认为两者都很出色,但我对它们的工作原理了解不够,无法进行有根据的比较,我想知道更多关于两者的区别。

解决办法

我创建Lo-Dash是为了给数组、字符串、对象和arguments对象提供更一致的跨环境迭代支持1 。它后来成为Underscore的超集,提供了更一致的API行为、更多的功能(如AMD支持、深度克隆和深度合并)、更全面的文档和单元测试(在Node、Ringo、Rhino、Narwhal、PhantomJS和浏览器中运行的测试)、更好的整体性能和对大型数组/对象迭代的优化,以及更灵活的自定义构建 和模板预编译工具。

由于Lo-Dash的更新比Underscore更频繁,因此提供了一个`lodash underscore'的构建,以确保与Underscore的最新稳定版本兼容。

有一次,我甚至被赋予了Underscore的推送权限,部分原因是Lo-Dash负责提出了30多个问题;在Underscore v1.4.x+中登陆了错误修复、新功能&perf收益。

此外,至少有3个Backbone模板默认包含了Lo-Dash,而且Lo-Dash现在在Backbone的官方文档中被提及。

请看Kit Cambridge的文章,对Lo-Dash说"你好",以深入了解Lo-Dash和Underscore之间的区别。

脚注。

1.Underscore对数组、字符串、对象和arguments对象的支持不一致。在较新的浏览器中,Underscore方法忽略了数组中的洞,"Objects"方法迭代了arguments对象,字符串被视为数组类,方法正确迭代了函数(忽略其"prototype"属性)和对象(迭代了"toString" 和"valueOf" 等阴影属性),而在较旧的浏览器中则不会。另外,Underscore方法如_.clone会保留数组中的洞,而其他方法如_.flatten则不会。

评论(22)

Lo-Dash的灵感来自于underscore,但现在是一个卓越的解决方案。你可以制作你的自定义构建,拥有更高的性能,支持AMD并拥有伟大的额外功能。查看jsperf上的Lo-Dash与Underscore的基准测试和......这个关于Lo-Dash的精彩帖子

当你使用集合时,最有用的功能之一是速记语法。

var characters = [
  { 'name': 'barney', 'age': 36, 'blocked': false },
  { 'name': 'fred',   'age': 40, 'blocked': true }
];

// using "_.filter" callback shorthand
_.filter(characters, { 'age': 36 });

// using underscore
_.filter(characters, function(character) { return character.age === 36; } );

// → [{ 'name': 'barney', 'age': 36, 'blocked': false }]

(摘自lodash docs)

评论(4)

除了John'的回答,以及对lodash的阅读(迄今为止我一直认为它是underscore的"me-too"),看到性能测试,阅读源代码,以及博客文章,使lodash比underscore优越的几个要点是。

1.这不是关于速度,而是关于速度的一致性(?) 如果你看一下underscore的源代码,你会在前几行看到underscore对许多函数的本地实现进行了修正。尽管在一个理想的世界里,这将是一个更好的方法,但如果你看一下[这些幻灯片](http://allyoucanleet.com/post/21624742336/jsconf-us-12-slides)中给出的一些perf链接,就不难得出结论,这些'本地实现的质量'在浏览器之间有很大差异。火狐在某些功能上是非常快的,而在某些功能上Chrome则占优势。(我想在某些情况下,IE也会占优势)。我认为,最好是选择一种代码,其**性能在不同的浏览器中更加一致

请阅读前面的博文,不要为了相信它而相信它,而是通过运行[基准](http://lodash.com/benchmarks)来自己判断。我现在很震惊,看到lodash的性能比underscore快100-150%,即使是*简单的、*原生的*函数,如Chrome的`Array.every`!

2.2.lodash中的**额外功能也相当有用。 3.3. 至于Xananax的建议对underscore的代码做出贡献的高票评论。有***好的竞争总是更好的,它不仅能保持创新,还能促使你保持自己(或你的库)的良好状态。

下面是lodash之间的差异列表,它的underscore-build可以直接替代你的underscore项目。

评论(12)