搜尋
首頁CMS教程&#&按擁抱 Underscore.js 的溫暖

拥抱 Underscore.js 的温暖

隨著 JavaScript 慢慢移出瀏覽器,出現了一些可以顯著提升 JavaScript 穩健性的工具。

其中一個工具稱為 Underscore.js,這是我們今天要介紹的工具。讓我們開始吧!


#認識 Underscore.js

那Underscore到底是做什麼的?

Underscore 是一個 JavaScript 實用工具庫,它提供了許多您在 Prototype.js(或 Ruby)中所期望的函數式程式設計支持,但沒有擴展任何內建 JavaScript 物件。

块引用>

使用 Python 或 Ruby 工作的好處之一是像 map 這樣的奇特結構,它讓生活變得更輕鬆。遺憾的是,目前版本的 JavaScript 在低階實用程式方面相當簡陋。

正如您在上面所讀到的,Underscore.js 是一個漂亮的小型 JavaScript 庫,它以僅 4kb 的大小帶來了數量驚人的功能。


下劃線的實際應用

“關於圖書館的廢話已經夠多了”,我可以聽到你說。你是對的!在我繼續我的大喊大叫之前,讓我們先看看 Underscore 的運行情況。

假設您有一組隨機的測驗分數,並且您需要一個包含 90 分數的清單。您通常會寫這樣的內容:

var scores = [84, 99, 91, 65, 87, 55, 72, 68, 95, 42], 
topScorers = [], scoreLimit = 90;

for (i=0; i<=scores.length; i++)
{
	if (scores[i]>scoreLimit)
	{
		topScorers.push(scores[i]);
	}
}

console.log(topScorers);

它非常簡單,即使進行了優化,對於我們想要做的事情來說也相當冗長。

讓我們看看接下來可以使用 Underscore 實現什麼目標。


var scores = [84, 99, 91, 65, 87, 55, 72, 68, 95, 42], 
topScorers = [], scoreLimit = 90;

topScorers = _.select(scores, function(score){ return score > scoreLimit;});

console.log(topScorers);

我不了解你,但我只是有一種書呆子氣。這是一些令人難以置信的簡潔可讀的程式碼。


很好,但我真的需要這個嗎?

嗯,這完全取決於您想要做什麼。如果您對 JavaScript 的使用僅限於玩弄 DOM,那麼答案大多是否定的,因為 jQuery 可以完成您想做的大部分事情。

是的。

另一方面,如果您正在處理非 DOM 程式碼甚至複雜程式碼,請考慮 MVC、前端程式碼,Underscore 絕對是一個福音。

雖然該程式庫公開的一些功能正在慢慢進入 ECMA 規範,但它並非在所有瀏覽器中都可用,並且讓您的程式碼跨瀏覽器工作本身就是另一個噩夢。 Underscore 為您提供了一組很好的抽象,可以在任何地方使用。

如果您是一個以性能為導向的人(您應該如此),Underscore 會回退到本機實現(如果可用),以確保性能盡可能最佳。


開始使用

只需在此處取得原始程式碼,將其包含在您的頁面中即可。

如果您期待一個大型的設定過程,那麼您將會非常失望。只需在此處獲取原始程式碼,將其包含在您的頁面中即可。

Underscore 在全域範圍內透過單一物件建立並公開其所有功能。該物件是標題下劃線字元 _。

如果您想知道,是的,這與 jQuery 使用美元 [$] 符號的方式非常相似。就像 jQuery 一樣,您可以重新映射此字符,以防遇到衝突。或者,如果您像我一樣對波形符有一種非理性的喜愛。


函數式還是物件導向?

雖然該函式庫的官方行銷宣傳聲稱它添加了函數式程式設計支持,但實際上還有另一種做事方式。

讓我們以之前的程式碼為例:


var scores = [84, 99, 91, 65, 87, 55, 72, 68, 95, 42], topScorers = [], scoreLimit = 90;

topScorers = _.select(scores, function(score){ return score > scoreLimit;});

console.log(topScorers);

上面的方法是功能性或程序性方法。您也可以使用更直接、可能更明顯的物件導向方法。


var scores = [84, 99, 91, 65, 87, 55, 72, 68, 95, 42], topScorers = [], scoreLimit = 90;

topScorers = _(scores).select(function(score){ return score > scoreLimit;});

console.log(topScorers);

沒有真正的「正確」方法來做事,但請記住,您可以使用後一種方法連結 jQuery 式方法。


檢查功能

Underscore 提供了 60 多個函數,涵蓋了多種功能。從本質上講,它們可以分為幾組功能,這些功能運行於:

  • 收藏
  • 陣列
  • 物件
  • 函數
  • 實用程式

讓我們看看每個部分的作用,如果適用,每個部分中我最喜歡的一兩個。


集合

集合可以是數組,也可以是對象,如果我在語意上是正確的,則可以是 JavaScript 中的關聯數組。

Underscore提供了許多對集合進行操作的方法。我們之前看到了 select 方法。這裡有一些更非常有用的。

採摘

#假設您有一個包含鍵值對的漂亮小數組,並且您想要從每個數組中提取一個特定的屬性。有了 Underscore,一切就輕鬆了。


var Tuts = [{name : 'NetTuts', niche : 'Web Development'}, {name : 'WPTuts', niche : 'WordPress'}, {name : 'PSDTuts', niche : 'PhotoShop'}, {name : 'AeTuts', niche : 'After Effects'}];
var niches = _.pluck(Tuts, 'niche');

console.log(niches);

// ["Web Development", "WordPress", "PhotoShop", "After Effects"]

使用 pluck 就像傳入目標物件或陣列以及選擇哪個屬性一樣簡單。在這裡,我只是提取每個網站的利基市場。

地圖

Map 從集合建立一個數組,其中每個元素都可以透過函數進行變異或以其他方式變更。

让我们以前面的示例为例并对其进行一些扩展。


var Tuts = [{name : 'NetTuts', niche : 'Web Development'}, {name : 'WPTuts', niche : 'WordPress'}, {name : 'PSDTuts', niche : 'PhotoShop'}, {name : 'AeTuts', niche : 'After Effects'}];

var names = _(Tuts).pluck('name').map(function (value){return value + '+'});

console.log(names);

// ["NetTuts+", "WPTuts+", "PSDTuts+", "AeTuts+"]

由于我注意到名称末尾缺少加号,因此我将它们添加到提取的数组中。

这里您不仅限于简单的串联。您可以根据自己的意愿随意修改传递的值。

全部

all 如果您需要检查集合中的每个值是否满足特定条件,则非常有用。例如,检查学生是否通过了每个科目。


var Scores = [95, 82, 98, 78, 65];
var hasPassed = _(Scores).all(function (value){return value>50; });

console.log(hasPassed);

// true

数组

Underscore 有很多专门处理数组的函数,这是非常受欢迎的,因为与其他语言相比,JavaScript 提供的处理数组的方法非常少。

Uniq

此方法基本上解析数组并删除所有重复元素,只为您提供唯一元素。


var uniqTest = _.uniq([1,5,4,4,5,2,1,1,3,2,2,3,4,1]);

console.log(uniqTest);

// [1, 5, 4, 2, 3]

当您解析巨大的数据集并需要清除重复项时,这非常方便。请记住,仅计算元素的第一个实例,因此保留原始顺序。

范围

一种非常方便的方法,可让您创建“范围”或数字列表。让我们看一个超级简单的例子。


var tens = _.range(0, 100, 10);

console.log(tens);

// [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

该方法的参数依次为起始值、结束值和步长值。如果您想知道,使用负步长值会导致递减范围。

交叉路口

此方法将两个数组相互比较,并返回在所有传递的数组中找到的元素列表,即集合论中的交集。

让我们扩展前面的示例来看看它是如何工作的。


var tens = _.range(0, 100, 10), eights = _.range(0, 100, 8), fives = _.range(0, 100, 5);

var common = _.intersection(tens, eights, fives );

console.log(common);

// [0, 40, 80]

很简单,对吧?您只需传入要比较的数组列表,Underscore 就会完成剩下的工作。


对象

除了预期的 is 检查之外,Underscore 还提供了各种方法来克隆、扩展和其他操作对象。

这是我最喜欢的一些。

键和值

有一个巨大的对象,您只需要键或只需要值?使用 Underscore 真是太简单了。


var Tuts = { NetTuts : 'Web Development',  WPTuts : 'WordPress',  PSDTuts : 'PhotoShop', AeTuts : 'After Effects'};
var keys = _.keys(Tuts), values = _.values(Tuts);

console.log(keys + values);

// NetTuts,WPTuts,PSDTuts,AeTutsWeb Development,WordPress,PhotoShop,After Effects

默认值

当您需要创建具有合理默认值的对象(而创建对象时可能不会使用该默认值)时,此方法非常有用。


var tuts = { NetTuts : 'Web Development'};
var defaults = { NetTuts : 'Web Development', niche: 'Education'};

_.defaults(tuts, defaults);

console.log(tuts);

// Object { NetTuts="Web Development", niche="Education"}

函数

尽管听起来很奇怪,Underscore 的函数可以作用于函数。大多数函数在这里解释起来往往相当复杂,因此我们将看一下最简单的函数。

绑定

this 是 JavaScript 中难以捉摸的一部分,往往会让很多开发人员感到非常困惑。此方法旨在使其更容易解决。


var o = { greeting: "Howdy" }, 
	f = function(name) { return this.greeting +" "+ name; };

  var greet = _.bind(f, o); 

  greet("Jess")

这有点令人困惑,所以请留在这儿。绑定函数基本上让您无论何时何地调用该函数都可以保留 this 的值。

当您使用 this 被劫持的事件处理程序时,这特别有用。


实用程序

为了进一步提高交易的吸引力,Underscore 提供了大量的实用函数。由于我们的时间已经不多了,所以让我们看看重要的事情。

模板化

已经有大量的模板解决方案,但 Underscore 的解决方案因其实现相当小而功能相当强大而值得一看。

让我们看一个快速示例。


var data =   {site: 'NetTuts'}, template =   'Welcome! You are at <%= site %>';

var parsedTemplate = _.template(template,  data );

console.log(parsedTemplate);

// Welcome! You are at NetTuts

首先,我们创建数据来填充模板,然后创建模板本身。默认情况下,Underscore 使用 ERB 样式分隔符,尽管这是完全可自定义的。

有了这些,我们就可以简单地调用 template 来传递我们的模板和数据。我们将结果存储在一个单独的字符串中,以便稍后根据需要用于更新内容。

请记住,这是 Underscore 模板的极其简单的演示。您可以使用 分隔符在模板内使用任何 JavaScript 代码。当您需要迭代复杂的对象(例如 JSON 源)时,您可以与 Underscore 出色的集合函数配合来快速创建模板。


仍然不相信你应该选择这个

jQuery 和 Underscore 齐头并进。

不不不,你们都错了!如果说有什么不同的话,那就是 jQuery 和 Underscore 相辅相成,齐头并进。真的!

看,jQuery 在一些事情上做得非常好。其中最主要的是 DOM 操作和动画。它不涉及较高或较低级别的任何内容。如果像 Backbone 或 Knockout 这样的框架处理更高级别的问题,那么 Underscore 可以解决所有相对裸机的问题。

从更广泛的角度来看,jQuery 在浏览器之外没有什么用途,因为它的大部分功能都与 DOM 相关。另一方面,下划线可以在浏览器或服务器端使用,没有任何问题。事实上,Underscore 依赖它的 Node 模块数量最多。

好了,今天就讲到这里。考虑到 Underscore 的范围,我们在这里仅仅触及了皮毛。请务必查看更多图书馆内容,如果您有任何疑问,请在下面的评论中告诉我。非常感谢您的阅读!

以上是擁抱 Underscore.js 的溫暖的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
wordpress怎麼加評論框wordpress怎麼加評論框Apr 20, 2025 pm 12:15 PM

在 WordPress 網站上啟用評論功能,可以為訪客提供參與討論和分享反饋的平台。為此,請按照以下步驟操作:啟用評論:在儀錶盤中,導航至“設置”>“討論”,並選中“允許評論”複選框。創建評論表單:在編輯器中,單擊“添加塊”並蒐索“評論”塊,將其添加到內容中。自定義評論表單:通過設置標題、標籤、佔位符和按鈕文本來定制評論塊。保存更改:單擊“更新”以保存評論框並將其添加到頁面或文章中。

wordpress怎麼複製子站wordpress怎麼複製子站Apr 20, 2025 pm 12:12 PM

如何復制 WordPress 子站?步驟:在主站創建子站。在主站克隆子站。將克隆導入目標位置。更新域名(可選)。分開插件和主題。

wordpress怎麼寫頁頭wordpress怎麼寫頁頭Apr 20, 2025 pm 12:09 PM

在WordPress中創建自定義頁頭的步驟如下:編輯主題文件“header.php”。添加您的網站名稱和描述。創建導航菜單。添加搜索欄。保存更改並查看您的自定義頁頭。

wordpress評論怎麼顯示wordpress評論怎麼顯示Apr 20, 2025 pm 12:06 PM

WordPress 網站中啟用評論功能:1. 登錄管理面板,轉到 "設置"-"討論",勾選 "允許評論";2. 選擇顯示評論的位置;3. 自定義評論表單;4. 管理評論,批准、拒絕或刪除;5. 使用 <?php comments_template(); ?> 標籤顯示評論;6. 啟用嵌套評論;7. 調整評論外形;8. 使用插件和驗證碼防止垃圾評論;9. 鼓勵用戶使用 Gravatar 頭像;10. 創建評論指

wordpress怎麼上傳源碼wordpress怎麼上傳源碼Apr 20, 2025 pm 12:03 PM

可以通過 WordPress 安裝 FTP 插件,配置 FTP 連接,然後使用文件管理器上傳源碼。步驟包括:安裝 FTP 插件、配置連接、瀏覽上傳位置、上傳文件、檢查上傳成功。

wordpress代碼怎麼複製wordpress代碼怎麼複製Apr 20, 2025 pm 12:00 PM

如何復制 WordPress 代碼?從管理界面複製:登錄 WordPress 網站,導航到目標位置,選擇代碼並按 Ctrl C (Windows)/Command C (Mac) 複製代碼。從文件複製:使用 SSH 或 FTP 連接到服務器,導航到主題或插件文件,選擇代碼並按 Ctrl C (Windows)/Command C (Mac) 複製代碼。

wordpress出現錯誤怎麼辦wordpress出現錯誤怎麼辦Apr 20, 2025 am 11:57 AM

WordPress 錯誤解決指南:500 內部服務器錯誤:禁用插件或檢查服務器錯誤日誌。 404 未找到頁面:檢查 permalink 並確保頁面鏈接正確。白屏死機:增加服務器 PHP 內存限制。數據庫連接錯誤:檢查數據庫服務器狀態和 WordPress 配置。其他技巧:啟用調試模式、檢查錯誤日誌和尋求支持。預防錯誤:定期更新 WordPress、僅安裝必要插件、定期備份網站和優化網站性能。

wordpress怎麼關閉評論wordpress怎麼關閉評論Apr 20, 2025 am 11:54 AM

如何在 WordPress 中關閉評論?特定文章或頁面:在編輯器中取消選中“討論”下的“允許評論”。整個網站:在“設置”->“討論”中取消選中“允許發表評論”。使用插件:安裝 Disable Comments 等插件禁用評論。編輯主題文件:通過編輯 comments.php 文件移除評論表單。自定義代碼:使用 add_filter() 函數禁用評論。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),