Lodash

关注
义项:JavaScript 工具库
Lodash

Lodash 是一个 JavaScript 实用工具库(utility library),提供数组、数字、对象、字符串等数据类型的常用操作函数,并以单个下划线字符作为全局入口[1]。它最初作为 Underscore.js 的分支出现,由 John-David Dalton 主导开发,目标是提供更一致的跨浏览器行为与更好的性能。Lodash 采用 MIT 许可证发布,支持模块化引入与自定义构建,曾是 npm 生态中被依赖最多的软件包之一。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Lodash 是一个用 JavaScript 编写的实用工具库,把处理数组、数字、对象、字符串等数据的常见操作封装成一组可复用的函数,从而减少开发者重复编写样板代码的工作量[1]。它公开一个名为 _ 的全局变量,全部功能都挂在这个变量之下,这一点与 jQuery 把功能挂在 $ 上的做法相似。库名本身也取自这个字符。

按照官方说明,Lodash 的模块化方法主要用于三类任务:遍历数组、对象与字符串;操作和检测值;以及创建组合函数[1]。它同时支持浏览器与 Node.js 环境,并遵循语义化版本规范发布[2]。

原理

Lodash 的基本工作方式是为常见数据操作提供统一的函数接口,并对不同运行环境中的原生实现差异做兼容处理。官方将其定位为在 JavaScript 中处理数组、数字、对象和字符串时省去麻烦的手段[1]。在版本 3 中,链式调用引入了惰性求值机制:一连串方法不会立即执行,而要等到显式或隐式地调用 value() 时才真正求值。

由于执行被推迟,Lodash 可以实施短路融合(shortcut fusion)一类的优化,把链上相邻的迭代函数合并,从而明显减少迭代次数。在发布策略上,Lodash 提供多种构建形态:核心构建体积约 4 kB(gzip 压缩后),只包含 foreach、map 等 65 个最关键功能;完整构建则包含更多方法。开发者也可以借助命令行工具按分类、按函数名裁剪出只含所需特性的自定义版本[3]。

版本 4 还引入了函数式编程风格的分支,通过 require('lodash/fp') 即可获得不可变、自动柯里化、迭代函数在前而数据在后的方法形式。

发展历程

Lodash 的前身是作为 Underscore.js 分支出现的项目。据 2015 年的一篇报道,分叉源于贡献者之间的意见分歧,最初的开发由 John-David Dalton 牵头,方向是提供更一致的跨浏览器行为并改进性能。早期版本的描述是 Underscore.js 的直接替代品,附带性能改进、缺陷修复和额外功能。另有资料称 Lodash 由 John-David Dalton 于 2012 年创建,而 Underscore.js 由 Jeremy Ashkenas 于 2009 年创建[4]。

2015 年 1 月发布的版本 3.0 带来较大幅度的改动,新增了 .camelCase、.flattenDeep 等 47 个方法,并开始对链式方法采用惰性求值。从该版本起,Lodash 不再提供专门面向 Underscore 或 Backbone 的构建,但项目仍会运行 Underscore 与 Backbone 的单元测试。同年前后,Lodash 达到 3.5 版本并一度成为 npm 仓库中被依赖最多的包。

2016 年 1 月,Lodash 发布 4.0.0 版本。该版本放弃对 IE 9 之前版本的支持,新增约 80 个方法,推出约 12 kB(gzip 后 4 kB)的核心构建,把函数式编程模块并入核心,并简化了模块引入路径。发布说明提到,这一年 Lodash 成为被依赖最多的 npm 包并突破 10 亿次下载,同时 Lodash 与 Underscore 的团队开始就合并两个库展开讨论。版本 4 同时取消了在 Bower 前端包管理器上的分发,改以 npm 为主要发布渠道。

应用

Lodash 在 Node.js 服务端与浏览器端项目中被广泛使用。有报道指出,Babel 转译器、博客平台 Ghost 和脚手架工具 Yeoman 等 npm 主要软件包都依赖 Lodash;其中 Ghost 最初使用 Underscore,后来改用 Lodash。版本 4 简化模块路径后降低了打包复杂度,官方发布说明称这一改动推动了 Async、Redux 等库对 Lodash 的采用。

在浏览器项目中,开发者可以借助构建工具按需挑选所需方法,而不必加载整个库;在 Node.js 项目中,也可以在不需要完整包的情况下单独引入某个方法。针对 ES6 模块和更小体积的需求,社区还提供了 lodash-es、babel-plugin-lodash 等配套包以便于树摇优化[5]。

局限

Lodash 的体积一直是被讨论的问题。有资料给出的对比是:Lodash 的 npm 包约为 1.41 MB,Underscore 约为 906 kB,虽然 Lodash 功能更多、性能更好,但体积也更大[4]。另有开发者列举的实测数据显示,Lodash 打包后约 523 kB,而 Underscore.js 约 51.6 kB,并指出这种差距可以通过选用 Lodash 的子集模块和树摇来缩小[6]。

版本 4 因为遵循语义化版本规范并包含较多破坏性变更,升级需要格外留意,官方为此提供了相应的迁移工具。另一个受到关注的因素是 JavaScript 语言本身的发展:随着 ES2015 及后续版本引入 Array.prototype.filter、Array.prototype.reduce、Array.prototype.forEach 以及 Object.assign、Array.isArray 等原生方法,开发者对这类工具库的依赖程度有所降低[4]。此外,由于 Lodash 并不总是回退使用原生方法,开发者可能因此错过宿主环境对内置方法的后续性能优化[6]。

参见

  • Underscore.js —— Lodash 早期作为它的分支出现,两者 API 长期相互靠拢。

  • JavaScript —— Lodash 所运行的编程语言,也是其封装操作的对象。

  • Node.js —— Lodash 服务端运行的主要环境之一。

  • 函数式编程 —— Lodash 的 fp 分支所采用的编程范式。

  • npm —— Lodash 的主要分发渠道。

参考资料

  1. Lodash [引用日期2026-10-14]
  2. googlesource.com 上的网页 [引用日期2026-10-14]
  3. custom-builds [引用日期2026-10-14]
  4. 【早阅】JavaScript 工具库演变:从 Lodash 和 Underscore 到原生 JavaScript [引用日期2026-10-14]
  5. lodash [引用日期2026-10-14]
  6. stackoverflow.com 上的网页 [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:55:20Z

历史版本

本条目引用的词条
JavaScript Node.js Async Redux Underscore.js 函数式编程 npm