Lodash vs Underscore.js: Which Should You Use?

This article compares Lodash and Underscore.js, two of the most popular utility libraries in the JavaScript ecosystem. While Lodash originally started as a fork of Underscore designed to offer better performance and more features, both libraries evolved to solve the problem of missing functional programming utilities in early JavaScript. Below is a direct comparison of their history, performance, feature sets, and relevance in modern web development.

History and Origins

Underscore.js was released in 2009 by Jeremy Ashkenas. It provided over 100 helper functions for handling arrays, objects, and functions, filling critical gaps in ECMAScript 5.

In 2012, John-David Dalton created Lodash as a fork of Underscore. The primary goals of Lodash were to deliver more consistent cross-environment behavior, improve execution speed, and offer enhanced customization options that Underscore did not support at the time.

Performance and Architecture

Lodash quickly surpassed Underscore in popularity largely due to its focus on performance optimization. Lodash introduced internal optimizations such as lazy evaluation through its chaining mechanism. This meant that operations chained together would only execute when necessary and compute values in fewer iterations.

Lodash was also architected to allow modular imports. Developers could import individual methods (such as import debounce from 'lodash/debounce') or install individual npm packages (such as lodash.clonedeep), significantly reducing bundle sizes in production builds. Underscore eventually adopted modular builds in later releases, but Lodash set the standard for modularity earlier.

Feature Set and Capabilities

While both libraries share a nearly identical core API for common operations like each, map, and filter, Lodash expands far beyond Underscore’s scope:

Relevance in Modern JavaScript (ES6+)

The rise of ECMAScript 2015 (ES6) and newer standards fundamentally changed the need for both libraries. Native JavaScript now includes methods like Array.prototype.map(), Array.prototype.filter(), Array.prototype.includes(), Object.assign(), the spread operator (...), and optional chaining (?.).

As a result:

Summary

Underscore.js is a lightweight, historically significant library that laid the foundation for functional helpers in JavaScript. Lodash is a more powerful, actively utilized superset that provides superior performance optimizations, modular imports, and advanced utilities for handling complex state and deep object operations. For modern projects that require utility functions beyond what native ES6+ provides, Lodash remains the industry-standard choice.