Lodash和Underscore之间的差异.js [已关闭]

2022-08-29 21:58:11

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

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

我认为两者都非常出色,但我对它们如何工作以进行有根据的比较还不够了解,我想知道更多关于差异的信息。


答案 1

我创建 Lodash 是为了为数组、字符串、对象和对象1 提供更一致的跨环境迭代支持。此后,它已成为Underscore.js的超集,提供更一致的API行为,更多功能(如AMD支持,深度克隆和深度合并),更全面的文档和单元测试(在Node.jsRingoJSRhinoNarwhalPhantomJS和浏览器中运行的测试),更好的整体性能和大型阵列/对象迭代的优化,以及自定义构建的更大灵活性 和模板预编译实用程序。arguments

由于Lodash的更新频率高于Underscore.js,因此提供了一个内部版本以确保与Underscore.js的最新稳定版本的兼容性。lodash underscore

有一次,我甚至被允许推送使用Underscore.js,部分原因是Lodash负责提出30多个问题;Underscore.js v1.4.x+ 中的登陆错误修复、新功能和性能提升。

此外,至少有三个Backbone.js样板,默认情况下包含Lodash,现在Backbone.js的官方文档中提到了Lodash。

查看Kit Cambridge的帖子,Say “Hello” to Lo-Dash,以更深入地了解Lodash和Underscore.js之间的差异。

脚注:

  1. 下划线.js对数组、字符串、对象和对象的支持不一致。在较新的浏览器中,Underscore.js方法忽略数组中的漏洞,“Objects”方法迭代对象,字符串被视为类似数组,方法正确迭代函数(忽略其“原型”属性)和对象(迭代阴影属性,如“toString”和“valueOf”),而在较旧的浏览器中,它们不会。此外,Underscore.js方法,如,保留数组中的孔,而其他方法则不然。argumentsarguments_.clone_.flatten

答案 2

Lodash的灵感来自Underscore.js,但现在它是一个优越的解决方案。您可以进行自定义构建,具有更高的性能,支持AMD并具有出色的额外功能。检查这个Lodash与Underscore.js jsperf和...这个关于Lodash的精彩帖子

当您使用集合时,最有用的功能之一是速记语法:
(尽管Underscore现在也支持此语法)

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

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

// Using Underscore.js
_.filter(characters, function(character) { return character.age === 36; } );

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

(摘自Lodash文档))