首頁 >web前端 >js教程 >收藏不是數組

收藏不是數組

Lisa Kudrow
Lisa Kudrow原創
2025-03-06 00:44:10468瀏覽

A collection is not an array

收藏不是數組

我對Dom 元素(更正式稱為Nodelist)的集合無法像數組那樣操縱的事實感到不滿,因為它不是一個。但是它看起來確實像一個,認為這是JavaScript新手經常犯的一個錯誤,即對於我們即將推出的JavaScript參考,我認為有必要注意這一點,因為>每個> dom> dom 對象,或返回集合。

您可以通過像數組這樣的收藏來迭代:

for(var i=0; i<collection.length; i++)
{
	//whatever
}
但是您不能使用push(),splice()或rectress()之類的數組方法來操縱它。

除非您可以,如果您採取下一步並將其轉換為數組。實際上,這是微不足道的:

function collectionToArray(collection)
{
	var ary = [];
	for(var i=0, len = collection.length; i < len; i++)
	{
		ary.push(collection[i]);
	}
	return ary;
}
上面的代碼是完全跨瀏覽器的,並以原始集合作為參數稱為:

var elements = collectionToArray(document.getElementsByTagName('*'));
但是,如果您只需要處理支持本地對象原型製作的瀏覽器(Opera,Firefox和Safari 3),那麼您可以簡單地創建Nodelist的ToArray()方法:

NodeList.prototype.toArray = function()
{
	var ary = [];
	for(var i=0, len = this.length; i < len; i++)
	{
		ary.push(this[i]);
	}
	return ary;
};
然後可以將其稱為單個集合的一種方法:

var elements = document.getElementsByTagName('*').toArray();
這種轉換有一個明顯的劣勢(但是完成了),那就是由此產生的陣列將不再是節日式的。顯而易見,是的,但有意義,因為它具有兩個含義:

  • >它將失去其從Nodelist繼承的屬性和方法。但是,Nodelist只有一個屬性(它的長度,也可用於數組),而一種方法(通常是冗餘的item()方法,因為成員仍然可以使用Square-bracket符號來引用成員)。因此,這種損失根本不是重大的
  • >它將不再是現場收藏。 Nodelist是對象集合的參考,如果該集合更改(例如,添加或刪除元素),節點符將自動更新以反映該更改; 相反,我們的數組是一個時間點的靜態快照,因此不會根據DOM 的更改進行更新。根據您的申請,這可能很重要。
>有關JavaScript收集和數組的經常詢問的問題

> javascript中的集合和數組之間有什麼區別?這些元素可以是任何類型的元素,包括其他集合。當您需要與一組類似項目一起工作時,通常會使用集合,但是它們沒有與數組相同的方法和屬性。另一方面,數組是代表項目列表的特殊對像類型。陣列具有操縱和查詢其內容的內置方法,例如推送,彈出,移位,解開等等。最常見的方法之一是使用array.from()函數。此函數從迭代的對象創建一個新的數組實例。以下是一個示例:

讓收集= document.getElementsbytagname('div');

讓array = array.from(collection);

在本示例中,在本示例中,div元素的集合被轉換為數組。不是數組。但是,您可以使用array.from()或差異操作員將集合轉換為數組,然後在結果數組上使用數組方法。 >
在JavaScript中使用集合而不是javascript?


集合的優點是什麼優點。它們提供了指向DOM的實時鏈接,這意味著如果DOM更改,則將自動更新集合。這是數組無法做的事情。但是,陣列具有更多的內置方法來操縱數據,因此對於數據操縱任務而言,它們通常更方便。

>什麼是JavaScript中的數組樣對象?

>一個數組樣對像是一個具有長度屬性並且可以像數組一樣將元素存儲在特定索引上的對象。但是,它沒有諸如push,pop等的數組方法。類似陣列的對象的常見示例是所有函數中可用的參數對象。

如何識別我如何在javascript中是一個數組還是javaScript?

​​

中的集合?如果對像是數組,則此方法將返回true,否則為false。沒有內置的方法可以檢查對像是否是集合,但是您可以檢查它是否具有集合的某些屬性,例如長度或物品。

>我可以使用傳播操作員將藏品轉換為數組嗎?

是的,您可以使用傳播器(……)將收藏夾轉換為陣列。傳播操作員通過將收集元素擴展到一個新數組來工作。以下是一個示例:


讓收集= document.getElementsbytagname('div');
讓array = [... collection];

> javaScript中的靜態和實時收藏之間的區別是什麼?這意味著,如果從DOM添加或刪除元素,則將自動更新集合以反映這些更改。另一方面,當DOM更改時,靜態集合不會更新。一旦創建它,​​無論對DOM的更改如何,它都保持不變。收集是只讀的。但是,您可以修改該集合所基於的DOM元素,如果該集合是實時集合,則可以更新集合。

>

我可以在JavaScript中的集合上使用foreach嗎?

​​

不,不,您不能直接在集合上使用foreach,因為集合不是數組。但是,您可以使用array.from()或差異操作員將集合轉換為數組,然後在結果數組上使用foreach。

以上是收藏不是數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn