jQuery.makeArray(obj)這個函數從名字來看很容易猜出它的用途:應該是用來將傳入的物件轉換成一個原生array
再看看官網上對它的解釋:Convert an array-like object into a true JavaScript array.(將一個類似數組物件轉換為JS原生的數組)
那麼怎麼樣的object才可以稱為" array-like object"呢?這個問題不急著回答,相信看完文章你會明白的,先看看下面的實驗
將HTMLCollection轉換成原生Array
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>jQuery.makeArray demo</title> <style> p { color: red; } </style> <script src="//code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <p> First </p> <p> Second </p> <p> Third </p> <p> Fourth </p> <script> // Returns a NodeList var elems = document.getElementsByTagName("p"); // Convert the NodeList to an Array var arr = jQuery.makeArray(elems); // Use an Array method on list of dom elements arr.reverse(); $(arr).appendTo(document.body); </script> </body> </html>
這裡可以看到在chrome中通過document .getElementsByTagName("p")回傳的是一個HTMLCollection
而非官網上所說的NodeList,特意去找了NodeList和HTMLCollection的區別:HTMLCollection 物件和 NodeList 物件很相似,但前者可能既能用名稱索引也能用數字索引,而後者只能用數字索引來存取(當然NodeList也是“array-like object”)
經過實驗發現elems可以用名稱和陣列來索引,結論:在chrome中透過document.getElementsByTagName("p")傳回的是一個HTMLCollection
HTMLCollection可以透過elems.length取得它的長度,並且可以透過elems[ 0]這樣的方式來存取其中的元素
像是不像陣列的存取方式?其實它就是就一個“Array-like object”,但它不是js的原生數組,所以無法存取array的native方法,例如(.pop() #and .reverse())
而後面透過jQuery.makeArray(elems)轉換就得到了原生的JS數組arr,接下來就可以使用array的native方法了!
將jQuery包裹的陣列轉換成原生Array
除了HTMLCollection,還可以轉換什麼呢?聽過jQuery包裹的陣列這麼一個玩意兒嗎?
不過肯定接觸過,例如透過$('p')得到一組p,這一組p就是一個jQuery包裹的陣列
又比如,透過.map( )函數得到的也是一個jQuery包裹的數組,也可以length來得到長度,並通過下標索引來訪問,並且jQuery包裹的數組還可以使用jQuery提供的方法。
可以透過$.makeArray(obj)來轉換成原生Array,例如最常見的在.map()函數中得到jQuery數組之後轉換成原生array再透過join()得到結果
當然,將jQuery包裹的陣列轉換成原生數組的方法不只這一種,常見的還有.get()和.toArray()
將json物件轉換成原生Array
這一種情況稍微複雜一點,因為json物件本來不是“array-like object”,所以我們需要一種轉換
還記得之前我們說的幾種“array-like object”嗎?它們都可以透過.length來得到長度,並且可以透過下標索引來訪問,例如:fakeArr.length、fakeArr[0]
那麼我們是否可以透過讓json支持這樣的方式來將它變成「array-like object」呢?
先設計:
要讓json支援fakeArr.length,簡單,只需要定義一個key為length的鍵值對就OK了
而支援下標存取似乎也可以迎刃而解,另外鍵值對都使用數字來當key就好了~
那麼試試看:
var fakeArray = {0: "张三", 1: "李四", 2:"朱六", length:3}; var realArray = $.makeArray(fakeArray); console.log(fakeArray) console.log(realArray) realArray.reverse(); console.log(realArray);
看到了嗎?成功了!這裡的realArray已經是js的原生array了,所以可以使用reverse()等native方法
#要注意的是,轉換過程中length很重要,這個length也就是決定了轉換後array的length
若將上述例子中的length指定為2,那麼轉換後的陣列只有前2個元素,也就是["張三", "李四"]
若將上述例子中的length指定為4,那麼轉換後的數組並不會是我們希望的數組,而是類似於new Array().push(fakeArray) 這樣一個數組
以上是jQuery中.makeArray()如何實作將多種型別轉換成JS原生Array的實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

javaandjavascriptaredistinctlanguages:javaisusedforenterpriseandmobileapps,while javascriptifforInteractiveWebpages.1)JavaisComcompoppored,statieldinglationallyTypted,statilly tater astrunsonjvm.2)

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

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

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用