<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Underscore.js</id>
	<title>Underscore.js - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Underscore.js"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Underscore.js&amp;action=history"/>
	<updated>2026-07-12T15:32:26Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Underscore.js&amp;diff=4052362&amp;oldid=prev</id>
		<title>imported&gt;Zestbot：​bot:替換lang-x模板為langx</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Underscore.js&amp;diff=4052362&amp;oldid=prev"/>
		<updated>2025-12-05T08:53:45Z</updated>

		<summary type="html">&lt;p&gt;bot:&lt;a href=&quot;/index.php?title=User:Zestbot/Bot17&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:Zestbot/Bot17（页面不存在）&quot;&gt;替換lang-x模板為langx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{NoteTA|G1=IT}}&lt;br /&gt;
{{Infobox software&lt;br /&gt;
| title                  = &lt;br /&gt;
| name                   = Underscore.js&lt;br /&gt;
| logo                   = Underscore.png&lt;br /&gt;
| logo size              = 250px&lt;br /&gt;
| logo caption           = &lt;br /&gt;
| screenshot             = &amp;lt;!-- [[File: ]] --&amp;gt;&lt;br /&gt;
| caption                = &lt;br /&gt;
| collapsible            = &lt;br /&gt;
| author                 = &lt;br /&gt;
| developer              = {{tsl|en|Jeremy Ashkenas||Jeremy Ashkenas}}和Julian Gonggrijp&lt;br /&gt;
| released               = {{Start date and age|2009|10|28}}&amp;lt;ref&amp;gt;{{Cite web|url=https://github.com/jashkenas/underscore/releases/tag/0.1.0|title=Release 0.1.0 · jashkenas/underscore|website=GitHub|accessdate=2022年8月25日|archive-date=2022年7月8日|archive-url=https://web.archive.org/web/20220708144830/https://github.com/jashkenas/underscore/releases/tag/0.1.0|dead-url=no}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| latest release version = 1.13.4&lt;br /&gt;
| latest release date    = {{Start date and age|2022|06|02}}&lt;br /&gt;
| latest preview version = &lt;br /&gt;
| latest preview date    = &lt;br /&gt;
| programming language   = [[JavaScript]]&lt;br /&gt;
| operating system       = &lt;br /&gt;
| platform               = &lt;br /&gt;
| size                   = 發行版 7.5&amp;amp;nbsp;KB&amp;lt;br /&amp;gt;開發版 68&amp;amp;nbsp;KB&lt;br /&gt;
| language               = &lt;br /&gt;
| language count         = &amp;lt;!-- DO NOT include this parameter unless you know what it does --&amp;gt;&lt;br /&gt;
| language footnote      = &lt;br /&gt;
| genre                  = [[JavaScript函式庫]]&lt;br /&gt;
| license                = [[MIT許可證|MIT]]&lt;br /&gt;
| alexa                  = &lt;br /&gt;
| website                = {{URL|http://underscorejs.org/}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Underscore.js&amp;#039;&amp;#039;&amp;#039;是一個綑綁常見功能的[[JavaScript]]函數庫。&amp;lt;ref&amp;gt;{{cite web |title=Underscore.js – ein kleines Framework mit Fokus |url=https://entwickler.de/online/javascript/underscore-js-framework-579836859.html |website=entwickler.de |access-date=9 July 2020 |language=de |date=20 June 2018 |archive-date=2021-04-14 |archive-url=https://web.archive.org/web/20210414060743/https://entwickler.de/online/javascript/underscore-js-framework-579836859.html |dead-url=no }}&amp;lt;/ref&amp;gt;Underscore.js提供的功能類似[[Prototype JavaScript框架|Prototype.js]]和[[Ruby]]，但其使用[[函数式编程]]而非[[基于原型编程]]。Underscore.js的文檔將自己稱為「與禮服（[[JQuery]]）和吊帶（Backbone.js）搭配的領帶（{{langx|en|the tie to go along with jQuery&amp;#039;s tux, and Backbone.js&amp;#039; suspenders.}}）」。Underscore.js由[[Backbone.js]]和[[CoffeeScript]]的建立者{{tsl|en|Jeremy Ashkenas||Jeremy Ashkenas}}建立。&amp;lt;ref&amp;gt;{{citation |url=https://open.blogs.nytimes.com/2012/04/04/javascript-meetup-city/ |title=JavaScript Meetup City |work=Open |publisher=[[纽约时报]] |date=April 4, 2012 |accessdate=2022-08-19 |archive-date=2017-07-06 |archive-url=https://web.archive.org/web/20170706140000/https://open.blogs.nytimes.com/2012/04/04/javascript-meetup-city/ |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 歷史 ==&lt;br /&gt;
2009年底，為了順利開發{{tsl|en|DocumentCloud||DocumentCloud}}，{{tsl|en|Jeremy Ashkenas||Jeremy Ashkenas}}開發了Underscore。&lt;br /&gt;
Underscore為最早提供通用函數式編程實用程序的JavaScript函數庫之一，靈感來自[[Prototype JavaScript框架|Prototype.js]]、Oliver Steele的Functional JavaScript和John Resig的Micro-Templating。&amp;lt;ref&amp;gt;{{cite web |last1=Ashkenas |first1=Jeremy |title=Underscore 0.4.0 source |url=https://cdn.rawgit.com/jashkenas/underscore/0.4.0/underscore.js |website=cdn.rawgit.com |access-date=1 March 2021 |ref=underscore-0-4-0 |archive-date=2021-03-23 |archive-url=https://web.archive.org/web/20210323121659/https://cdn.rawgit.com/jashkenas/underscore/0.4.0/underscore.js |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2012年，John-David Dalton建立Underscore的[[分叉 (软件开发)|分叉]]Lo-Dash（現在的[[Lodash]]）。開發初期，Lo-Dash被評價為「可客製化、效能佳和附加功能多」之Underscore的替代品。&amp;lt;ref&amp;gt;{{cite web |title=Lo-Dash v2.2.1 |url=https://lodash.com |website=lodash.com |access-date=1 March 2021 |ref=lodash-2-2-1-site |archive-url=https://web.archive.org/web/20131106035559/http://lodash.com/ |archive-date=6 November 2013 |url-status=usurped}}&amp;lt;/ref&amp;gt;儘管如此，Lodash在分叉早期階段便和Underscore的[[介面_(程式設計)|介面]]有不小的差異&amp;lt;ref&amp;gt;{{cite web |title=Lodash Changelog - 1.0.0 rc1 |url=https://github.com/lodash/lodash/wiki/Changelog#v100-rc1 |website=github.com |access-date=1 March 2021 |ref=lodash-changelog-1-0-0-rc1 |date=4 December 2012 |archive-date=2022-08-17 |archive-url=https://web.archive.org/web/20220817153323/https://github.com/lodash/lodash/wiki/Changelog#v100-rc1 |dead-url=no }}&amp;lt;/ref&amp;gt;，甚至在3.0.0版本中開始更劇烈的變更，使得用戶必須要大量變更才能升級到新版本的Lodash或是從Underscore遷移到Lodash。&amp;lt;ref&amp;gt;{{cite web |title=Lodash Changelog - 3.0.0 |url=https://github.com/lodash/lodash/wiki/Changelog#v300 |website=github.com |access-date=1 March 2021 |ref=lodash-changelog-3-0-0 |date=26 January 2015 |archive-date=2022-08-17 |archive-url=https://web.archive.org/web/20220817153323/https://github.com/lodash/lodash/wiki/Changelog#v300 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2015年5月，Jeremy Ashkenas透露John-David Dalton已與他取得聯繫，希望將Lodash合併回Underscore。縱然代碼風格和代碼大小可能會對合併產生困擾，Ashkenas並不反對將Lodash的一些擴充內容合併到Underscore。&amp;lt;ref&amp;gt;{{cite web |last1=Ashkenas |first1=Jeremy |title=The Big Kahuna: Underscore + Lodash Merge Thread |url=https://github.com/jashkenas/underscore/issues/2182 |website=github.com |access-date=1 March 2021 |ref=underscore-issue-2182 |date=21 May 2015 |archive-date=2022-08-17 |archive-url=https://web.archive.org/web/20220817153324/https://github.com/jashkenas/underscore/issues/2182 |dead-url=no }}&amp;lt;/ref&amp;gt;當時有幾個開發人員同時為Underscore和Lodash做出貢獻，這些貢獻者開始對Underscore進行更改，使其更像Lodash。&amp;lt;ref&amp;gt;{{cite web |title=Underscore: merged pull requests with breaking changes between 21 May and 1 October 2015 |url=https://github.com/jashkenas/underscore/pulls?q=is%3Apr+is%3Amerged+created%3A%3E2015-05-21+merged%3A%3C2015-09-01+label%3A%22breaking+change%22 |website=github.com |access-date=1 March 2021 |ref=underscore-breaking-prs-2015 |archive-date=2022-08-17 |archive-url=https://web.archive.org/web/20220817204213/https://github.com/jashkenas/underscore/pulls?q=is:pr+is:merged+created:%3E2015-05-21+merged:%3C2015-09-01+label:%22breaking+change%22 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
然而，在眾人為此努力的同時，Dalton對Lodash的介面進行了更大幅度的更改，並於2015年6月發布Lodash的版本4.0.0。此更改使得Lodash與Underscore介面差距更大，也凸顯了其與Lodash本身的3.x系列版本地不小差異&amp;lt;ref&amp;gt;{{cite web |last1=Dalton |first1=John-David |title=comment on &amp;#039;Core API&amp;#039; |url=https://github.com/underdash/underdash/issues/4#issuecomment-110026962 |website=github.com |access-date=1 March 2021 |ref=underdash-issue-4-jdalton-comment-110026962 |date=8 June 2015 |archive-date=2022-08-17 |archive-url=https://web.archive.org/web/20220817153508/https://github.com/underdash/underdash/issues/4#issuecomment-110026962 |dead-url=no }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web |title=Lodash changelog 4.0.0 |url=https://github.com/lodash/lodash/wiki/Changelog#v400 |website=github.com |access-date=1 March 2021 |ref=lodash-changelog-4-0-0 |date=12 January 2016 |archive-date=2022-08-17 |archive-url=https://web.archive.org/web/20220817153323/https://github.com/lodash/lodash/wiki/Changelog#v400 |dead-url=no }}&amp;lt;/ref&amp;gt;，同時此更改也促使一些依賴Lodash的項目分叉了自己的Lodash 3發行版。&amp;lt;ref&amp;gt;{{cite web |title=@sailshq/lodash |url=https://www.npmjs.com/package/@sailshq/lodash |website=npmjs.com |access-date=1 March 2021 |ref=sails-lodash-npm-package |archive-date=2022-08-27 |archive-url=https://web.archive.org/web/20220827002133/https://www.npmjs.com/package/@sailshq/lodash |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2016年2月，Dalton宣布他認為合併工作已經完成，並建議Underscore用戶切換到Lodash。&amp;lt;ref&amp;gt;{{cite web |last1=Dalton |first1=John-David |title=Merge update. |url=https://github.com/underdash/underdash/issues/14 |website=github.com |access-date=1 March 2021 |ref=underdash-issue-14 |date=13 February 2016 |archive-date=2020-10-12 |archive-url=https://web.archive.org/web/20201012052706/https://github.com/underdash/underdash/issues/14 |dead-url=no }}&amp;lt;/ref&amp;gt;然而，Underscore的維護者明確表示，Underscore依然會作為單獨的庫存在。&amp;lt;ref&amp;gt;{{cite web |last1=Krebs |first1=Adam |title=comment on &amp;#039;Merge update.&amp;#039; |url=https://github.com/underdash/underdash/issues/14#issuecomment-185279839 |website=github.com |access-date=1 March 2021 |ref=underdash-issue-14-comment-185279839 |date=17 February 2016 |archive-date=2020-10-12 |archive-url=https://web.archive.org/web/20201012052706/https://github.com/underdash/underdash/issues/14#issuecomment-185279839 |dead-url=no }}&amp;lt;/ref&amp;gt;兩個函數庫在 2016 年之後都進入了低開發活動狀態。&amp;lt;ref name=&amp;quot;underscore-contributors&amp;quot;&amp;gt;{{cite web |title=jashkenas/underscore Insights: Contributors |url=https://github.com/jashkenas/underscore/graphs/contributors |website=github.com |access-date=1 March 2021 |ref=underscore-contributors |archive-date=2022-08-17 |archive-url=https://web.archive.org/web/20220817153458/https://github.com/jashkenas/underscore/graphs/contributors |dead-url=no }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web |title=lodash/lodash Insight: Contributors |url=https://github.com/lodash/lodash/graphs/contributors |website=github.com |access-date=1 March 2021 |ref=lodash-contributors |archive-date=2022-08-17 |archive-url=https://web.archive.org/web/20220817153456/https://github.com/lodash/lodash/graphs/contributors |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
隨著時間的推移，較新版本的[[ECMAScript]]標準借鑒了Underscore的部分功能，例如&amp;lt;code&amp;gt;Object.assign&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;Array.prototype.map&amp;lt;/code&amp;gt;。儘管這些內置函數不如Underscore等效函數強大，此變更依然使得部分人認為Underscore不再為JavaScript項目增加價值。然而，新加入的數組功能只能在數組上使用，而非如同Underscore一樣可以適用任意迭代對象。&amp;lt;ref&amp;gt;{{cite web |title=Array.prototype.map |url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map |website=developer.mozilla.org |access-date=1 March 2021 |ref=mdn-array-map |archive-date=2022-09-08 |archive-url=https://web.archive.org/web/20220908223951/https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Map |dead-url=no }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web |title=Array.prototype.filter |url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter |website=developer.mozilla.org |access-date=1 March 2021 |ref=mdn-array-filter |archive-date=2022-09-08 |archive-url=https://web.archive.org/web/20220908203748/https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter |dead-url=no }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web |title=Array.prototype.forEach |url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach |website=developer.mozilla.org |access-date=1 March 2021 |ref=mdn-array-forEach |archive-date=2022-09-08 |archive-url=https://web.archive.org/web/20220908203750/https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach |dead-url=no }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web |title=_.map |url=https://underscorejs.org/#map |website=underscorejs.org |access-date=1 March 2021 |ref=underscore-map |archive-date=2022-09-09 |archive-url=https://web.archive.org/web/20220909023026/http://underscorejs.org/#map |dead-url=no }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web |title=_.filter |url=https://underscorejs.org/#filter |website=underscorejs.org |access-date=1 March 2021 |ref=underscore-filter |archive-date=2022-09-09 |archive-url=https://web.archive.org/web/20220909023026/http://underscorejs.org/#filter |dead-url=no }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web |title=_.each |url=https://underscorejs.org/#each |website=underscorejs.org |access-date=1 March 2021 |ref=underscore-each |archive-date=2022-09-09 |archive-url=https://web.archive.org/web/20220909023026/http://underscorejs.org/#each |dead-url=no }}&amp;lt;/ref&amp;gt;除此之外，Underscore的大部分函數仍然沒有內置對應函數。&amp;lt;ref&amp;gt;{{cite web |title=Underscore.js |url=https://underscorejs.org/ |website=underscorejs.org |access-date=1 March 2021 |ref=underscore-website |archive-date=2022-09-09 |archive-url=https://web.archive.org/web/20220909023026/http://underscorejs.org/ |dead-url=no }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web |title=JavaScript reference |url=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference |website=developer.mozilla.org |access-date=1 March 2021 |ref=mdn-js-ref |archive-date=2022-09-04 |archive-url=https://web.archive.org/web/20220904020728/https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
截至2021年3月，Julian Gonggrijp正在積極開發Underscore，他於2020年3月開始做出重大貢獻。&amp;lt;ref name=&amp;quot;underscore-contributors&amp;quot; /&amp;gt;至今仍有許多函數庫依賴Underscore，[[Npm|npm]]上的每週下載次依然高達數百萬次。&amp;lt;ref&amp;gt;{{cite web |title=underscore |url=https://www.npmjs.com/package/underscore |website=npmjs.com |access-date=1 March 2021 |ref=npm-underscore |archive-date=2022-08-17 |archive-url=https://web.archive.org/web/20220817153321/https://www.npmjs.com/package/underscore |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 內容 ==&lt;br /&gt;
&lt;br /&gt;
簡而言之，Underscore提供了三大功能：&lt;br /&gt;
&lt;br /&gt;
# 100多個泛用函數集合。[https://underscorejs.org/ 文檔] {{Wayback|url=https://underscorejs.org/ |date=20220909023026 }}區分出了幾個類別：&lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;集合函數&amp;#039;&amp;#039;&amp;#039;，例如&amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;min&amp;lt;/code&amp;gt;／&amp;lt;code&amp;gt;max&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;groupBy&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;shuffle&amp;lt;/code&amp;gt;，這些函數可以對迭代物件的元素進行操作。&lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;數組函數&amp;#039;&amp;#039;&amp;#039;，例如&amp;lt;code&amp;gt;first&amp;lt;/code&amp;gt;／&amp;lt;code&amp;gt;last&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;flatten&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;chunk&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;zip&amp;lt;/code&amp;gt;，這些函數可以對類數組物件進行操作。&lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;函數函數&amp;#039;&amp;#039;&amp;#039;，例如&amp;lt;code&amp;gt;bind&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;memoize&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;partial&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;debounce&amp;lt;/code&amp;gt;，這些函數將函數作為參數並返回具有改變屬性的新函數（[[高阶函数]]）。&lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;物件函數&amp;#039;&amp;#039;&amp;#039;為最基礎的類別，包含許多也在Underscore內部使用的函數。&amp;lt;ref&amp;gt;{{cite web |last1=Gonggrijp |first1=Julian |title=modules/index.js |url=https://underscorejs.org/docs/modules/index.html |website=underscorejs.org |access-date=5 March 2021 |ref=underscore-index |archive-date=2022-08-17 |archive-url=https://web.archive.org/web/20220817153526/https://underscorejs.org/docs/modules/index.html |dead-url=no }}&amp;lt;/ref&amp;gt;物件函數大致可以分為兩個子類：&lt;br /&gt;
#** &amp;#039;&amp;#039;&amp;#039;類型檢測函數&amp;#039;&amp;#039;&amp;#039;，例如&amp;lt;code&amp;gt;isNumber&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;isElement&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;isDataView&amp;lt;/code&amp;gt;。&lt;br /&gt;
#** &amp;#039;&amp;#039;&amp;#039;物件數據函數&amp;#039;&amp;#039;&amp;#039;，例如&amp;lt;code&amp;gt;keys&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;extend&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;pick&amp;lt;/code&amp;gt;／&amp;lt;code&amp;gt;omit&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;pairs&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;invert&amp;lt;/code&amp;gt;，這些函數將一般物件作為數據進行操作。&lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;實用函數&amp;#039;&amp;#039;&amp;#039;是一個雜項類別，其中包括瑣碎功能如&amp;lt;code&amp;gt;identity&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;noop&amp;lt;/code&amp;gt;和字符串操作函數&amp;lt;code&amp;gt;escape&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;unescape&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;template&amp;lt;/code&amp;gt;。此類別還包括函數&amp;lt;code&amp;gt;iteratee&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;mixin&amp;lt;/code&amp;gt;，它們可以被視為第2點中提及的特殊工具。&lt;br /&gt;
# 特殊工具，例如&amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;iteratee&amp;lt;/code&amp;gt;，這些特殊工具與第1點的函數相結合用以實現更短、更清晰的語法。以庫命名的特殊函數 &amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt; 是這些設施的核心。&lt;br /&gt;
需要閱讀的有文化的源代碼，以便很容易理解庫的實現方式。文檔包括源代碼的渲染版本，其中註釋在左側，邏輯在右側。註釋使用Markdown格式化，邏輯有語法高亮。從 1.11 版本開始，Underscore 是模塊化的。出於這個原因，文檔現在包括帶註釋源的模塊化版本，其中每個功能都在一個單獨的頁面上，並且import引用是可點擊的超鏈接，以及一個單一閱讀版本，其中所有功能都在一個頁面上依賴順序。&lt;br /&gt;
# 使用[[文学编程]]進行編程，故程式碼較容易閱讀，且較容易理解函數庫的實現方式。Underscore文檔加入了源始碼的渲染版本，其中註釋在左側，邏輯在右側。註釋使用[[Markdown]]格式化，邏輯加上了[[語法突顯]]。自1.11版起，Underscore進行了模組化，因此文檔也同步加入了[https://underscorejs.org/docs/modules/index-all.html 模組化版本] {{Wayback|url=https://underscorejs.org/docs/modules/index-all.html |date=20220817153502 }}，每個功能都在一個單獨的頁面上，並且import引用是可點擊的[[超連結]]；同時也文檔也提供了一個[https://underscorejs.org/docs/underscore-esm.html 匯集所有模組的版本] {{Wayback|url=https://underscorejs.org/docs/underscore-esm.html |date=20220817153322 }}，使用[[拓撲排序]]進行排序。&lt;br /&gt;
&lt;br /&gt;
=== 功能概述和示例 ===&lt;br /&gt;
&lt;br /&gt;
Underscore使用[[函数式编程]]，故而可以將多個函數混和成新的{{tsl|en|expression (computer science)||表達式}}。例如下方的程式碼便是使用兩個Underscore函數以使用第一個字元進行分組：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import { groupBy, first } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
groupBy([&amp;#039;avocado&amp;#039;, &amp;#039;apricot&amp;#039;, &amp;#039;cherry&amp;#039;, &amp;#039;date&amp;#039;, &amp;#039;durian&amp;#039;], first);&lt;br /&gt;
&lt;br /&gt;
// result:&lt;br /&gt;
// { a: [&amp;#039;avocado&amp;#039;, &amp;#039;apricot&amp;#039;],&lt;br /&gt;
//   c: [&amp;#039;cherry&amp;#039;],&lt;br /&gt;
//   d: [&amp;#039;date&amp;#039;, &amp;#039;durian&amp;#039;]&lt;br /&gt;
// }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
除了使用Underscore內建的函數，也可以自訂函數。例如下方程式碼實踐了自己的&amp;lt;code&amp;gt;first&amp;lt;/code&amp;gt;函數，其結果和上方程式碼相同：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import { groupBy } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
const first = array =&amp;gt; array[0];&lt;br /&gt;
&lt;br /&gt;
groupBy([&amp;#039;avocado&amp;#039;, &amp;#039;apricot&amp;#039;, &amp;#039;cherry&amp;#039;, &amp;#039;date&amp;#039;, &amp;#039;durian&amp;#039;], first);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Underscore內建不少這類型的函數，以便程序員可以從現有函數組合功能，而非每次都要自己實踐。&lt;br /&gt;
&lt;br /&gt;
正常情況下，第一個參數會傳入迭代對象，第二個參數傳入迭代函數或&amp;#039;&amp;#039;iteratee&amp;#039;&amp;#039;。上方示例中，&amp;lt;code&amp;gt;first&amp;lt;/code&amp;gt;是傳遞給&amp;lt;code&amp;gt;groupBy&amp;lt;/code&amp;gt;的迭代函數。&lt;br /&gt;
&lt;br /&gt;
iteratee會接收三個參數：&lt;br /&gt;
# 集合中當前位置的值&lt;br /&gt;
# 該值的鍵或索引&lt;br /&gt;
# 整個集合&lt;br /&gt;
下方示例中使用了&amp;lt;code&amp;gt;pick&amp;lt;/code&amp;gt;的第二個參數，過濾掉鍵名首字母不是大寫字母的屬性：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import { pick } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
const details = {&lt;br /&gt;
    Official: &amp;#039;Wolfgang Amadeus Mozart&amp;#039;,&lt;br /&gt;
    informal: &amp;#039;Wolfie&amp;#039;&lt;br /&gt;
};&lt;br /&gt;
const keyIsUpper = (value, key) =&amp;gt; key[0] === key[0].toUpperCase();&lt;br /&gt;
&lt;br /&gt;
pick(details, keyIsUpper);&lt;br /&gt;
// {Official: &amp;#039;Wolfgang Amadeus Mozart&amp;#039;}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
許多Underscore的函數都可以當作迭代函數，如第一個範例使用的&amp;lt;code&amp;gt;first&amp;lt;/code&amp;gt;。除此之外，程序員還可以使用[[#迭代縮寫|迭代縮寫]]以避開編寫迭代函數。下方示例中，迭代縮寫為字符串&amp;lt;code&amp;gt;&amp;#039;name&amp;#039;&amp;lt;/code&amp;gt;，以從迭代對象提取鍵值為&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;的屬性：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import { map } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
const people = [&lt;br /&gt;
    {name: &amp;#039;Lily&amp;#039;, age: 44, occupation: &amp;#039;librarian&amp;#039;},&lt;br /&gt;
    {name: &amp;#039;Harold&amp;#039;, age: 10, occupation: &amp;#039;dreamer&amp;#039;},&lt;br /&gt;
    {name: &amp;#039;Sasha&amp;#039;, age: 68, occupation: &amp;#039;library developer&amp;#039;}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
map(people, &amp;#039;name&amp;#039;);  // [&amp;#039;Lily&amp;#039;, &amp;#039;Harold&amp;#039;, &amp;#039;Sasha&amp;#039;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
「集合」類別中的所有函數，包括上方範例的&amp;lt;code&amp;gt;groupBy&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;函數，都可以遍歷迭代對象的索引和對象的鍵。下方示例使用函數&amp;lt;code&amp;gt;reduce&amp;lt;/code&amp;gt;說明：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import { reduce } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
const add = (a, b) =&amp;gt; a + b;&lt;br /&gt;
const sum = numbers =&amp;gt; reduce(numbers, add, 0);&lt;br /&gt;
&lt;br /&gt;
sum([11, 12, 13]);                  // 36&lt;br /&gt;
sum({Alice: 9, Bob: 9, Clair: 7});  // 25&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
除了遍歷數組或對象的函數外，Underscore還提供了廣泛的其他常用函數，例如&amp;lt;code&amp;gt;throttle&amp;lt;/code&amp;gt;限制了目標函數的最大呼叫頻率：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import { throttle } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
// The scroll event triggers very often, so the following line may&lt;br /&gt;
// slow down the browser.&lt;br /&gt;
document.body.addEventListener(&amp;#039;scroll&amp;#039;, expensiveUpdateFunction);&lt;br /&gt;
&lt;br /&gt;
// Limit evaluation to once every 100 milliseconds.&lt;br /&gt;
const throttledUpdateFunction = throttle(expensiveUpdateFunction, 100);&lt;br /&gt;
&lt;br /&gt;
// Much smoother user experience!&lt;br /&gt;
document.body.addEventListener(&amp;#039;scroll&amp;#039;, throttledUpdateFunction);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
另一個例子是&amp;lt;code&amp;gt;defaults&amp;lt;/code&amp;gt;函數，僅在尚未設置時才分配對象屬性：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import { defaults } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
const requestData = {&lt;br /&gt;
    url: &amp;#039;wikipedia.org&amp;#039;,&lt;br /&gt;
    method: &amp;#039;POST&amp;#039;,&lt;br /&gt;
    body: &amp;#039;article text&amp;#039;&lt;br /&gt;
};&lt;br /&gt;
const defaultFields = {&lt;br /&gt;
    method: &amp;#039;GET&amp;#039;,&lt;br /&gt;
    headers: {&amp;#039;X-Requested-With&amp;#039;: &amp;#039;XMLHttpRequest&amp;#039;}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
defaults(requestData, defaultFields);&lt;br /&gt;
// {&lt;br /&gt;
//     url: &amp;#039;wikipedia.org&amp;#039;,&lt;br /&gt;
//     method: &amp;#039;POST&amp;#039;,&lt;br /&gt;
//     body: &amp;#039;article text&amp;#039;,&lt;br /&gt;
//     headers: {&amp;#039;X-Requested-With&amp;#039;: &amp;#039;XMLHttpRequest&amp;#039;}&lt;br /&gt;
// }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;函數 ===&lt;br /&gt;
&lt;br /&gt;
Underscore的名字來源於多種用途的&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;函數。&lt;br /&gt;
&lt;br /&gt;
==== 包裝函數 ====&lt;br /&gt;
&lt;br /&gt;
Underscore的主函數&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;將第一個參數包裝起來，返回一個可以呼叫所有Underscore的函數的方法，此時第一個參數將作為這些函數的第一個參數傳入。此方法又被稱作「OOP樣式」，專門用於「{{link-en|連結|next section}}」。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import _, { last } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;Normal&amp;quot; or &amp;quot;functional&amp;quot; style&lt;br /&gt;
last([1, 2, 3]); // 3&lt;br /&gt;
&lt;br /&gt;
// &amp;quot;OOP style&amp;quot;&lt;br /&gt;
_([1, 2, 3]).last() // 3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
可以透過&amp;lt;code&amp;gt;.value()&amp;lt;/code&amp;gt;拿到原始傳入的值，在JavaScript的自動轉型下也會自己展開：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
// Explicit unwrap&lt;br /&gt;
_([1, 2, 3]).value()  // [1, 2, 3]&lt;br /&gt;
&lt;br /&gt;
// Automatic unwrap when coerced to number&lt;br /&gt;
1 + _(2)  // 3&lt;br /&gt;
&lt;br /&gt;
// Automatic unwrap when coerced to string&lt;br /&gt;
&amp;#039;abc&amp;#039; + _(&amp;#039;def&amp;#039;)  // &amp;#039;abcdef&amp;#039;&lt;br /&gt;
&lt;br /&gt;
// Automatic unwrap when formatted as JSON&lt;br /&gt;
JSON.stringify({ a: _([1, 2]) })  // &amp;#039;{&amp;quot;a&amp;quot;:[1,2]}&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 部份套用佔位符 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;函數還可以用來當作&amp;lt;code&amp;gt;partial&amp;lt;/code&amp;gt;函數的佔位符。&amp;lt;code&amp;gt;partial&amp;lt;/code&amp;gt;用來建立一個函數的{{tsl|en|partial application||部份套用}}版本，而&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;函數可用於使某些參數「打開（{{langx|en|open}}）」，而這些參數可以在後續呼叫中再傳入。 例如{{section||功能概述和示例}}一節提到的&amp;lt;code&amp;gt;groupBy&amp;lt;/code&amp;gt;範例可以改變成下方的用法以方便重複使用：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import _, { partial, groupBy, first } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
const groupByFirstChar = partial(groupBy, _, first);&lt;br /&gt;
&lt;br /&gt;
groupByFirstChar([&amp;#039;avocado&amp;#039;, &amp;#039;apricot&amp;#039;, &amp;#039;cherry&amp;#039;, &amp;#039;date&amp;#039;, &amp;#039;durian&amp;#039;]);&lt;br /&gt;
// { a: [&amp;#039;avocado&amp;#039;, &amp;#039;apricot&amp;#039;],&lt;br /&gt;
//   c: [&amp;#039;cherry&amp;#039;],&lt;br /&gt;
//   d: [&amp;#039;date&amp;#039;, &amp;#039;durian&amp;#039;]&lt;br /&gt;
// }&lt;br /&gt;
&lt;br /&gt;
groupByFirstChar([&amp;#039;chestnut&amp;#039;, &amp;#039;pistache&amp;#039;, &amp;#039;walnut&amp;#039;, &amp;#039;cashew&amp;#039;]);&lt;br /&gt;
// { c: [&amp;#039;chestnut&amp;#039;, &amp;#039;cashew&amp;#039;],&lt;br /&gt;
//   p: [&amp;#039;pistache&amp;#039;],&lt;br /&gt;
//   w: [&amp;#039;walnut]&lt;br /&gt;
// }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 自定義入口點 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;也可做為{{tsl|en|personalization||自定義}}Underscore函數的入口點，程序員可以根據需要調整Underscore函數的行為。具體來說，用戶可以重寫&amp;lt;code&amp;gt;_.iteratee&amp;lt;/code&amp;gt;以建立新的{{tsl|en|iteratee shorthands||迭代縮寫}}，又或是重寫&amp;lt;code&amp;gt;_.templateSettings&amp;lt;/code&amp;gt;以自定義&amp;lt;code&amp;gt;template&amp;lt;/code&amp;gt;函數。&lt;br /&gt;
&lt;br /&gt;
==== 命名空間 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;在舊式的{{tsl|en|Asynchronous module definition||AMD}}模組系統和[[CommonJS]]模組系統中也同時作為[[命名空間]]存在，即&amp;#039;&amp;#039;所有&amp;#039;&amp;#039;Underscore函數都包含在此一命名空間中，例如&amp;lt;code&amp;gt;_.map&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;_.debounce&amp;lt;/code&amp;gt;。在JavaScript發展出[[ECMAScript|ES6]]的[[模块化编程|模組系統]]後命名空間已無必要性。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
var _ = require(&amp;#039;underscore&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
_.groupBy([&amp;#039;avocado&amp;#039;, &amp;#039;apricot&amp;#039;, &amp;#039;cherry&amp;#039;, &amp;#039;date&amp;#039;, &amp;#039;durian&amp;#039;], _.first);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
命名空間也可以用於區分不同模組提供的函數，比如Underscore和[https://caolan.github.io/async/v3/ Async] {{Wayback|url=https://caolan.github.io/async/v3/ |date=20220616051257 }}都提供了名為&amp;lt;code&amp;gt;each&amp;lt;/code&amp;gt;的函數，可以分別使用&amp;lt;code&amp;gt;_.each&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;async.each&amp;lt;/code&amp;gt;來區分這些函數。&lt;br /&gt;
&lt;br /&gt;
=== 連結 ===&lt;br /&gt;
&lt;br /&gt;
The function &amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt; can be used to create a modified version of the wrapper produced by [[#_函數|&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;函數]]. When invoked on such a &amp;#039;&amp;#039;chained wrapper&amp;#039;&amp;#039;, each method returns a new wrapper so that the user can continue to process intermediate results with Underscore functions:&lt;br /&gt;
&amp;lt;code&amp;gt;chain&amp;lt;/code&amp;gt;函數用來建立由[[#_函數|&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;函數]]生成的包裝物件的修改版本。當在這種「鍊式包裝器（{{langx|en|chained wrapper}}）」上調用時，每個方法都會返回一個新的包裝物件，以便用戶可以連續使用Underscore函數：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import { chain } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
const square = x =&amp;gt; x * x;&lt;br /&gt;
const isOdd = x =&amp;gt; x % 2;&lt;br /&gt;
&lt;br /&gt;
chain([1, 2, 3, 4]).filter(isOdd).map(square).last()&lt;br /&gt;
// returns a wrapper of 9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
也可以使用&amp;lt;code&amp;gt;.value()&amp;lt;/code&amp;gt;結束Underscore函數群搭配&amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;語法：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
const add = (x, y) =&amp;gt; x + y;&lt;br /&gt;
&lt;br /&gt;
// Given an array of numbers, return the sum of the squares of&lt;br /&gt;
// those numbers. This could be used in a statistics library.&lt;br /&gt;
function sumOfSquares(numbers) {&lt;br /&gt;
    return chain(numbers)&lt;br /&gt;
        .map(square)&lt;br /&gt;
        .reduce(add)&lt;br /&gt;
        .value();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
連結並不是Underscore內建的函數獨有的功能。程序員也可以傳遞自定義函數給&amp;lt;code&amp;gt;mixin&amp;lt;/code&amp;gt;函數來為自己的函數啟用連結：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;18&amp;quot;&amp;gt;&lt;br /&gt;
import { reduce, mixin } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
const sum = numbers =&amp;gt; reduce(numbers, add, 0);&lt;br /&gt;
&lt;br /&gt;
mixin({ sum, square });&lt;br /&gt;
&lt;br /&gt;
chain([1, 2, 3]).map(square).sum().value();  // 14&lt;br /&gt;
chain([1, 2, 3]).sum().square().value();     // 36&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
實際上Underscore內建的函數都是使用此方法來啟用連結，即先編寫為獨立函數，而後「混合」到&amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt;函數中。&amp;lt;ref&amp;gt;{{cite web |last1=Gonggrijp |first1=Julian |title=modules/index-default.js |url=https://underscorejs.org/docs/modules/index-default.html |website=underscorejs.org |access-date=4 March 2021 |ref=underscore-index-default |archive-date=2022-08-17 |archive-url=https://web.archive.org/web/20220817153459/https://underscorejs.org/docs/modules/index-default.html |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 迭代縮寫 ===&lt;br /&gt;
&lt;br /&gt;
如同{{section||功能概述和示例}}所述，大多數Underscore的迭代函數都可使用迭代縮寫（{{langx|en|iteratee shorthand}}）代替取代函數。下方範例使用了前面章節的範例來演示：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import { map } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
const people = [&lt;br /&gt;
    {name: &amp;#039;Lily&amp;#039;, details: {age: 44, occupation: &amp;#039;fire fighter&amp;#039;}},&lt;br /&gt;
    {name: &amp;#039;Harold&amp;#039;, details: {age: 10, occupation: &amp;#039;dreamer&amp;#039;}},&lt;br /&gt;
    {name: &amp;#039;Sasha&amp;#039;, details: {age: 68, occupation: &amp;#039;library developer&amp;#039;}}&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
map(people, &amp;#039;name&amp;#039;);  // [&amp;#039;Lily&amp;#039;, &amp;#039;Harold&amp;#039;, &amp;#039;Sasha&amp;#039;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
實際上，這些迭代函數是將通過將簡寫值傳遞給&amp;lt;code&amp;gt;_.iteratee&amp;lt;/code&amp;gt;來確定實際調用的函數，而&amp;lt;code&amp;gt;_.iteratee&amp;lt;/code&amp;gt;默認為Underscore內建的&amp;lt;code&amp;gt;iteratee&amp;lt;/code&amp;gt;函數，此函數根據參數值返回下列幾種函數：&lt;br /&gt;
&lt;br /&gt;
==== 路徑 ====&lt;br /&gt;
&lt;br /&gt;
當傳入值是一個字符串，&amp;lt;code&amp;gt;iteratee&amp;lt;/code&amp;gt;函數會將傳入值傳入&amp;lt;code&amp;gt;property&amp;lt;/code&amp;gt;函數，此函數用於過濾鍵名與傳入值相同的鍵值。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
import { iteratee, property } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
map(people, &amp;#039;name&amp;#039;);&lt;br /&gt;
map(people, iteratee(&amp;#039;name&amp;#039;));&lt;br /&gt;
map(people, property(&amp;#039;name&amp;#039;));&lt;br /&gt;
map(people, obj =&amp;gt; obj &amp;amp;&amp;amp; obj[&amp;#039;name&amp;#039;]);&lt;br /&gt;
// [&amp;#039;Lily&amp;#039;, &amp;#039;Harold&amp;#039;, &amp;#039;Sasha&amp;#039;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
也可以傳入陣列。當傳入陣列時，&amp;lt;code&amp;gt;property&amp;lt;/code&amp;gt;函數將遞迴搜尋目標屬性。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
map(people, [&amp;#039;details&amp;#039;, &amp;#039;occupation&amp;#039;]);&lt;br /&gt;
// [&amp;#039;fire fighter&amp;#039;, &amp;#039;dreamer&amp;#039;, &amp;#039;library developer&amp;#039;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
也可以傳入數字，傳入數字時將作為數組和字符串索引。&lt;br /&gt;
&lt;br /&gt;
結合上方功能，下方範例給出了計算職業名稱中第二個字符出現的次數的方法：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
import { countBy } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
countBy(people, [&amp;#039;details&amp;#039;, &amp;#039;occupation&amp;#039;, 1]);  // {i: 2, r: 1}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 屬性雜湊 ====&lt;br /&gt;
&lt;br /&gt;
當傳入值是一個物件，&amp;lt;code&amp;gt;iteratee&amp;lt;/code&amp;gt;函數會將傳入值傳入&amp;lt;code&amp;gt;matcher&amp;lt;/code&amp;gt;函數，此函數會檢查鍵名與鍵值是否皆有匹配，並依照是否匹配返回&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;或&amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
import { find } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
find(people, {name: &amp;#039;Sasha&amp;#039;});&lt;br /&gt;
// {name: &amp;#039;Sasha&amp;#039;, details: {age: 68, occupation: &amp;#039;library developer&amp;#039;}}&lt;br /&gt;
&lt;br /&gt;
find(people, {name: &amp;#039;Walter&amp;#039;});&lt;br /&gt;
// undefined&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
當傳入值是&amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;或&amp;lt;code&amp;gt;undefined&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;iteratee&amp;lt;/code&amp;gt;函數返回一個[[恆等函數]]&amp;lt;code&amp;gt;identity&amp;lt;/code&amp;gt;。此函數用於過濾數組值在JavaScript中強制轉型為布林值時為&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;或&amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import { filter, iteratee, identity } from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
const example = [0, 1, &amp;#039;&amp;#039;, &amp;#039;abc&amp;#039;, true, false, {}];&lt;br /&gt;
&lt;br /&gt;
// The following expressions are all equivalent.&lt;br /&gt;
filter(example);&lt;br /&gt;
filter(example, undefined);&lt;br /&gt;
filter(example, iteratee(undefined));&lt;br /&gt;
filter(example, identity);&lt;br /&gt;
// [1, &amp;#039;abc&amp;#039;, true, {}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 覆蓋&amp;lt;code&amp;gt;_.iteratee&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
程序員可以通過覆蓋&amp;lt;code&amp;gt;_.iteratee&amp;lt;/code&amp;gt;來增加自定義的迭代縮寫。下方範例描述如何新增[[正規表達法]]作為迭代縮寫。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import {&lt;br /&gt;
    iteratee as originalIteratee,&lt;br /&gt;
    isRegExp,&lt;br /&gt;
    mixin,&lt;br /&gt;
    filter,&lt;br /&gt;
} from &amp;#039;underscore&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
function iteratee(value, context) {&lt;br /&gt;
    if (isRegExp(value)) {&lt;br /&gt;
        return string =&amp;gt; value.test(string);&lt;br /&gt;
    } else {&lt;br /&gt;
        return originalIteratee(value, context);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mixin({iteratee});&lt;br /&gt;
&lt;br /&gt;
filter([&amp;#039;absolutely&amp;#039;, &amp;#039;amazing&amp;#039;, &amp;#039;fabulous&amp;#039;, &amp;#039;trousers&amp;#039;], /ab/);&lt;br /&gt;
// [&amp;#039;absolutely&amp;#039;, &amp;#039;fabulous&amp;#039;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 參考文獻 ==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== 外部連結 ==&lt;br /&gt;
*{{Official website|https://underscorejs.org/}}&lt;br /&gt;
*[https://web.archive.org/web/20081201075555/https://osteele.com/sources/javascript/functional/ Functional Javascript] by Oliver Steele (internet archive; osteele.com only retains a [https://osteele.com/functional-javascript/ae8ve7ulujbtdu0zcu6qfuhq3sbegu screenshot]{{Dead link}})&lt;br /&gt;
*[https://johnresig.com/blog/javascript-micro-templating/ JavaScript Micro-Templating] {{Wayback|url=https://johnresig.com/blog/javascript-micro-templating/ |date=20220810035513 }} by John Resig, the original inspiration for [https://underscorejs.org/#template &amp;lt;code&amp;gt;_.template&amp;lt;/code&amp;gt;] {{Wayback|url=https://underscorejs.org/#template |date=20220909023026 }}&lt;br /&gt;
&lt;br /&gt;
{{JS templating |state=autocollapse}}&lt;br /&gt;
{{NodeJs}}&lt;br /&gt;
&lt;br /&gt;
== 參見 ==&lt;br /&gt;
{{Portal|自由軟體}}&lt;br /&gt;
&lt;br /&gt;
* [[Lodash]]&lt;br /&gt;
* [[Prototype JavaScript框架|Prototype.js]]&lt;br /&gt;
* [[Web应用框架]]&lt;br /&gt;
* [[JavaScript函式庫]]&lt;br /&gt;
&lt;br /&gt;
[[Category:JavaScript函式庫]]&lt;br /&gt;
[[Category:使用MIT许可证的软件]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Zestbot</name></author>
	</entry>
</feed>