Rumah > hujung hadapan web > tutorial js > Koleksi bukanlah pelbagai

Koleksi bukanlah pelbagai

Lisa Kudrow
Lepaskan: 2025-03-06 00:44:10
asal
468 orang telah melayarinya

3

Saya kadang -kadang terkejut dengan hakikat bahawa koleksi unsur -unsur DOM (lebih formal dipanggil nodelis) tidak boleh dimanipulasi seperti array, kerana ia bukan satu. Walau bagaimanapun, ia kelihatan seperti satu, dan memikirkan ia adalah satu kesilapan yang dibuat begitu kerap oleh orang -orang baru JavaScript bahawa untuk rujukan JavaScript yang akan datang, saya merasakan perlu untuk diperhatikan perkara ini untuk A collection is not an array setiap

dom

objek yang, atau mengembalikan, koleksi. Koleksi bukanlah pelbagai

Anda boleh melangkah melalui koleksi seperti array:

Tetapi anda tidak boleh menggunakan kaedah array seperti push (), splice () atau terbalik () untuk memanipulasinya. Kecuali anda boleh, jika anda mengambil langkah seterusnya dan menukarnya menjadi array. Ini sebenarnya remeh:

Kod di atas adalah penyemak imbas sepenuhnya, dan dipanggil dengan koleksi asal sebagai hujah:
for(var i=0; i<collection.length; i++)
{
	//whatever
}
Salin selepas log masuk

Walau bagaimanapun, jika anda hanya perlu berurusan dengan penyemak imbas yang menyokong prototaip objek asli (Opera, Firefox dan Safari 3) maka anda hanya boleh membuat kaedah ToArray () nodelist:

function collectionToArray(collection)
{
	var ary = [];
	for(var i=0, len = collection.length; i < len; i++)
	{
		ary.push(collection[i]);
	}
	return ary;
}
Salin selepas log masuk
Yang kemudiannya boleh dipanggil sebagai kaedah koleksi individu:

var elements = collectionToArray(document.getElementsByTagName('*'));
Salin selepas log masuk
Terdapat satu kelemahan yang jelas untuk penukaran ini (namun ia dilakukan), iaitu array yang dihasilkan tidak lagi menjadi nodel. Jelas, ya, tetapi relevan kerana ia mempunyai dua implikasi:

  • Ia akan kehilangan sifat dan kaedah yang diwarisi dari nodel. Walau bagaimanapun, nodelist hanya mempunyai satu harta (panjangnya, yang juga tersedia untuk array), dan satu kaedah (kaedah item (), yang biasanya berlebihan, kerana ahli masih boleh dirujuk dengan notasi square-bracket). Jadi kerugian ini sama sekali tidak penting
  • Ia tidak lagi menjadi koleksi langsung. Nodelist adalah rujukan kepada koleksi objek, dan jika pengumpulan itu berubah (contohnya, unsur -unsur ditambah atau dikeluarkan) nodel akan mengemas kini secara automatik untuk mencerminkan perubahan itu; Sebaliknya array kami adalah gambaran statik koleksi pada satu titik dalam masa, dan oleh itu tidak akan dikemas kini sebagai tindak balas kepada perubahan dalam DOM . Bergantung pada permohonan anda, itu mungkin penting.

soalan yang sering ditanya mengenai koleksi dan tatasusunan JavaScript

Apakah perbezaan antara koleksi dan array dalam JavaScript? Unsur -unsur ini boleh menjadi jenis, termasuk koleksi lain. Koleksi sering digunakan apabila anda perlu bekerja dengan sekumpulan item yang sama, tetapi mereka tidak mempunyai kaedah dan sifat yang sama seperti array. Sebaliknya, array adalah jenis objek khas yang mewakili senarai item. Array mempunyai kaedah terbina dalam untuk memanipulasi dan menanyakan kandungannya, seperti push, pop, shift, unshift, dan sebagainya. Salah satu kaedah yang paling biasa ialah menggunakan fungsi Array.From (). Fungsi ini mewujudkan contoh array baru dari objek yang boleh dimakan. Berikut adalah contoh:

let collection = document.getElementsByTagName ('div');

biarkan array = array.from (koleksi); bukan tatasusunan. Walau bagaimanapun, anda boleh menukar koleksi ke array menggunakan array.From () atau pengendali penyebaran, dan kemudian gunakan kaedah array pada array yang dihasilkan. Mereka menyediakan pautan langsung ke DOM, yang bermaksud bahawa jika DOM berubah, koleksi itu dikemas kini secara automatik. Ini adalah sesuatu yang tidak dapat dilakukan oleh array. Walau bagaimanapun, tatasusunan mempunyai lebih banyak kaedah terbina dalam untuk memanipulasi data, jadi mereka sering lebih mudah untuk tugas manipulasi data.

Apakah objek seperti array dalam JavaScript? Walau bagaimanapun, ia tidak mempunyai kaedah array seperti push, pop, dan lain-lain. Contoh umum objek seperti array adalah objek argumen yang tersedia dalam semua fungsi. Kaedah ini kembali benar jika objek itu adalah array, dan sebaliknya. Tidak ada kaedah terbina dalam untuk memeriksa sama ada objek adalah koleksi, tetapi anda boleh menyemak sama ada ia mempunyai sifat tertentu yang biasa untuk koleksi, seperti panjang atau item. Pengendali penyebaran berfungsi dengan menyebarkan unsur -unsur koleksi ke dalam array baru. Berikut adalah contoh:

let collection = document.getElementsByTagName ('div');

biarkan array = [... koleksi]; Ini bermakna jika elemen ditambah atau dikeluarkan dari DOM, koleksi itu dikemas kini secara automatik untuk mencerminkan perubahan ini. Koleksi statik, sebaliknya, tidak mengemaskini apabila DOM berubah. Sebaik sahaja ia dicipta, ia tetap sama tanpa mengira perubahan pada dom. Koleksi hanya dibaca. Walau bagaimanapun, anda boleh mengubah suai elemen DOM yang koleksi itu berdasarkan, yang seterusnya akan mengemas kini koleksi jika ia adalah koleksi langsung. Walau bagaimanapun, anda boleh menukar koleksi ke array menggunakan array.from () atau pengendali penyebaran, dan kemudian gunakan foreach pada array yang dihasilkan.

Atas ialah kandungan terperinci Koleksi bukanlah pelbagai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan