为什么有人更喜欢Lodash或Undercore.js实用程序库而不是另一个?

Lodash似乎是下划线的替代品,后者已经存在了更长的时间。

我认为两者都很出色,但我对它们的工作原理了解不足,无法进行有意义的比较,我想了解更多的差异。


当前回答

除了约翰的回答,阅读Lodash(我之前一直认为Lodash是Undercore.js的“我也是”),查看性能测试、阅读源代码和博客文章之外,还有以下几点使Lodash远优于Undercore.jss:

这不是关于速度,而是关于速度的一致性(?)

如果您查看Undercore.js的源代码,您将在前几行中看到Undercore.jss依赖于许多函数的本地实现。尽管在理想的情况下,这会是一种更好的方法,但如果您查看这些幻灯片中提供的一些性能链接,就不难得出结论,即这些“本地实现”的质量因浏览器而异。Firefox在某些功能上非常快,在某些Chrome中占据主导地位。(我想在某些情况下,Internet Explorer也会占据主导地位)。我认为,最好选择性能在浏览器之间更一致的代码。

一定要早一点阅读博客文章,不要为了它而相信它,而是通过运行基准来自己判断。我现在很震惊,看到Lodash在Chrome中的Array.every等简单的原生函数中比Undercore.js快100-150%!

Lodash中的临时演员也很有用。至于Xanax的一条备受好评的评论,建议对Undercore.js的代码做出贡献:拥有良好的竞争总是更好的,这不仅能保持创新,还能让你保持自己(或你的库)的良好状态。

这里列出了Lodash之间的差异,它的Undercore.js构建是Undercore.jss项目的替代品。

其他回答

我不确定OP是不是这个意思,但我遇到了这个问题,因为我在搜索从Undercore.js迁移到Lodash时必须记住的问题列表。

如果有人发表一篇文章,列出这些差异的完整列表,我将非常感激。让我从我用艰难的方式学到的东西开始(也就是说,那些让我的代码在生产中爆炸的东西:/):

_默认情况下,Undercore.js中的.sflat为deep,必须将true作为第二个参数传递,使其变浅。在Lodash中,默认情况下它是浅的,将true作为第二个参数传递将使其变深!:)_Underscore.js中的.last接受第二个参数,该参数告诉您需要多少元素。在Lodash,没有这样的选择。您可以使用.sslice来模拟这一点_.第一期(同一期)_可以以多种方式使用Undercore.js中的.template,其中之一是提供模板字符串和数据并获取HTML(或者至少这是一段时间前的工作方式)。在Lodash中,您会收到一个函数,然后您应该向该函数提供数据。_(something).map(foo)在Undercore.js中工作,但在Lodash中,我不得不将其重写为_.map(somethink,foo)。也许这只是TypeScript问题。

我只是发现了一个对我来说很重要的区别。Lodash的_.extend()的非Underscore.js兼容版本不复制类级别定义的财产或方法。

我在CoffeeScript中创建了一个Jasmine测试,演示了这一点:

https://gist.github.com/softcraft-development/1c3964402b099893bd61

幸运的是,lodash.underscore.js保留了Undercore.js复制所有内容的行为,这对我来说是理想的行为。

Undercore.js大部分是Lodash的子集。

有时,就像现在一样,Undercore.js会有Lodash没有的一些很酷的小功能,比如mapObject。这一次为我的项目开发节省了大量时间。

他们非常相似,Lodash正在接手。。。

它们都是一个实用程序库,在JavaScript中占据了实用程序的世界。。。

看来Lodash现在更新得更频繁了,所以在最新的项目中使用得更多了。。。

此外,洛达什似乎比几位KBs更轻。。。

两者都有很好的API和文档,但我认为Lodash更好。。。

下面是获取数组第一个值的每个文档项的屏幕截图。。。

Undercore.js:

Lodash公司:

由于事情可能会不时更新,只需查看他们的网站。。。

洛达什牌手表

下划线.js

本·麦考密克(Ben McCormick)的《Undercore vs Lo Dash》(Undercore vs Lo Dash)是最新一篇将两者进行比较的文章:

Lodash的API是Undercore.js的超集。

在幕后,洛达什被彻底改写了。

Lodash绝对不会比Undercore.js慢。

Lodash补充了什么?

可用性改进额外功能性能提升链接的速记语法自定义生成以仅使用所需内容语义版本控制和100%代码覆盖率