Kata -kata sebelumnya
Array adalah seperangkat nilai yang diatur secara berurutan, dan relatif terhadap nama properti objek rusak. Pada dasarnya, array menggunakan angka sebagai kunci pencarian, sementara objek memiliki nama atribut yang ditentukan pengguna. JavaScript tidak memiliki array asosiatif yang nyata, tetapi objek dapat digunakan untuk mengimplementasikan fungsi asosiatif
Array () hanyalah jenis objek khusus (), yaitu, instance array () pada dasarnya adalah instance objek () dengan beberapa fungsi tambahan. Array dapat menampung semua jenis nilai, yang dapat diperbarui atau dihapus kapan saja, dan ukuran array disesuaikan secara dinamis.
Selain objek, tipe array array mungkin adalah tipe javascript yang paling umum digunakan. Selain itu, array dalam JavaScript sangat berbeda dari yang ada di kebanyakan bahasa lain. Artikel ini akan memperkenalkan jenis array array di javascript
Buat array
Ada dua cara untuk membuat array: menggunakan sintaks literal dan menggunakan konstruktor array ()
【Harfiah】
Menggunakan array literal adalah cara termudah untuk membuat array. Pisahkan elemen array dengan koma di kurung persegi
var kosong = []; // array tanpa elemen var primes = [2,3,5,7,11]; // array dengan 5 nilai
Meskipun array JavaScript dipesan daftar data serta array dalam bahasa lain, tidak seperti bahasa lain, setiap item array JavaScript dapat menampung jenis data apa pun
var misc = [1.1, true, "a"]; // 3 elemen dari berbagai jenis
Nilai -nilai dalam array literal tidak harus konstanta, mereka bisa berupa ekspresi apapun
var base = 1024; var table = [basis, basis+1, basis+2, basis+3];
Itu dapat berisi literal objek atau literal array lainnya
var b = [[1, {x: 1, y: 2}], [2, {x: 3, y: 4}]];Jika elemen array masih array, array multi-dimensi terbentuk
var a = [[1, 2], [3, 4]];
[Catatan] Saat menggunakan notasi literal numerik, konstruktor array tidak akan dipanggil
【Konstruktor】
Ada tiga cara untuk memanggil konstruktor
【1】 Tidak ada parameter, buat array kosong
// Metode ini membuat array kosong tanpa elemen apa pun, yang setara dengan jumlah langsung array [] var a = array baru ();
【2】 Ada parameter numerik, yang digunakan untuk menentukan panjang array
var a = array baru (10); console.log (a); // [] console.log (a [0], a.length); // tidak ditentukan 10
[Catatan] Jika ada jenis parameter lain, array yang hanya berisi nilai dari nilai itu akan dibuat
var a = array baru ('10 '); console.log (a); // [' 10 '] console.log (a [0], a.length); // 10 1【3】 Ketika ada beberapa parameter, parameter direpresentasikan sebagai elemen spesifik dari array
var a = array baru (1,2,3); console.log (a); // [1,2,3] console.log (a [0], a [1], a [2]); // 1 2 3
Saat menggunakan konstruktor array (), operator baru dapat dihilangkan
var a1 = array (); var a2 = array (10); var a3 = array (1,2,3); console.log (a1, a2, a3); // [] [] [1,2,3]
Nature Array
Array adalah seperangkat nilai yang diatur secara berurutan. Intinya, array adalah objek khusus.
Tipeof [1, 2, 3] // "objek"
Kekhasan suatu array tercermin karena nama -nama kuncinya adalah seperangkat bilangan bulat (0, 1, 2 ...) yang diatur secara berurutan. Karena nama kunci anggota array diperbaiki, array tidak perlu menentukan nama kunci untuk setiap elemen, tetapi setiap anggota objek harus menentukan nama kunci.
var arr = ['a', 'b', 'c']; console.log (objek.keys (arr)); // ["0", "1", "2"] var obj = {name1: 'a', name2: 'b', name3: 'c'};Array adalah bentuk objek khusus. Mengakses elemen array dengan tanda kurung persegi seperti mengakses properti objek dengan tanda kurung persegi.
Bahasa JavaScript menetapkan bahwa nama -nama kunci objek adalah string, sehingga nama -nama kunci array sebenarnya adalah string. Alasan mengapa dapat dibaca dengan nilai numerik adalah bahwa nama kunci non-string akan dikonversi menjadi string dan kemudian digunakan sebagai nama atribut
o = {}; // Buat objek biasa o [1] = "satu"; // indeks dengan integer // nama kunci numerik secara otomatis dikonversi menjadi string var arr = ['a', 'b', 'c']; arr ['0'] // 'a'arr [0] //' a 'Namun, perlu untuk membedakan antara indeks array dan nama atribut objek: Semua indeks adalah nama atribut, tetapi hanya nama atribut integer antara 0 ~ 232-2 (4294967294) adalah indeks
var a = []; // indeks a ['1000'] = 'abc'; a [1000] // 'abc' // indeks a [1.00] = 6; a [1] // 6
[Catatan] Nilai individu tidak dapat digunakan sebagai pengidentifikasi. Oleh karena itu, anggota array hanya dapat diekspresikan dalam tanda kurung persegi
var arr = [1, 2, 3]; arr [0]; // 1arr.0; // sintakserror
Array dapat diindeks menggunakan nomor negatif atau non-integer. Namun, karena tidak berada dalam kisaran 0 ~ 2 dengan kekuatan 32 -2, itu hanya nama atribut array, bukan indeks array. Fitur yang jelas adalah tidak mengubah panjang array
var a = [1,2,3]; // Nama atribut a [-1.23] = true; console.log (a.length); // 3 // indeks a [10] = 5; console.log (a.length); // 11 // nama atribut a ['abc'] = 'pengujian'; konsol.log (a.length);/
Array yang jarang
Array yang jarang adalah array yang berisi indeks terputus mulai dari 0.
【1】 Cara paling langsung untuk membuat array yang jarang adalah dengan menggunakan operator hapus
var a = [1,2,3,4,5]; hapus a [1]; console.log (a [1]); // undefinedconsole.log (1 dalam a); // false
【2】 Nilai elemen dapat dihilangkan antara koma array, dan array yang jarang dapat dibuat dengan menghilangkan nilai elemen.
var a = [1 ,, 3,4,5]; console.log (a [1]); // undefinedconsole.log (1 dalam a); // false
[Catatan] Ada perbedaan antara nilai elemen yang dihilangkan dan nilai elemen yang nilainya tidak terdefinisi.
var a = [1 ,, 3,4,5]; console.log (a [1]); // undefinedconsole.log (1 dalam a); // falsevar a = [1, tidak terdefinisi, 3,4,5]; console.log (a [1]); // tidak terdefinfinedconsole.log (1 dalam a);
Jika Anda menggunakan koma di akhir array, ada perbedaan antara browser. Koma diabaikan oleh browser standar, sedangkan IE8-browser menambahkan nilai yang tidak ditentukan di akhir
// Output browser standar [1,2], sementara IE8-browser output [1,2, tidak terdefinisi] var a = [1,2,]; console.log (a); // output browser standar 2, sedangkan output IE8-browser 3var a = [,,]; console.log (a.length);
Array yang cukup jarang biasanya lebih lambat dalam implementasi daripada array padat dan memiliki pemanfaatan memori yang lebih tinggi, dan waktu untuk mencari elemen dalam array seperti itu adalah waktu untuk mencari properti dari objek reguler
Panjang array
Setiap array memiliki atribut panjang, yang merupakan atribut ini yang membedakannya dari objek JavaScript konvensional. Untuk array yang padat (yaitu, non-sparse), nilai atribut panjang mewakili jumlah elemen dalam array, dan nilainya 1 lebih besar dari indeks terbesar dalam array.
[] .length // => 0: Array tidak memiliki elemen ['a', 'b', 'c']. Panjang // => 3: indeks maksimum adalah 2, dan panjangnya 3
Ketika array adalah array yang jarang, nilai atribut panjang lebih besar dari jumlah elemen. Demikian pula, nilainya 1 lebih besar dari indeks terbesar dalam array
[,,].panjang; //3(Array(10)).length;//10var a = [1,2,3]; console.log (a.length); // 3delete a [1]; console.log (a.length); // 3
Kekhasan array terutama tercermin dalam fakta bahwa panjang array dapat disesuaikan secara dinamis:
【1】 Jika Anda menetapkan nilai ke elemen array dan indeks I lebih besar dari atau sama dengan panjang array yang ada, nilai atribut panjang akan diatur ke i+1
var arr = ['a', 'b']; arr.length // 2arr [2] = 'c'; arr.length // 3arr [9] = 'd'; arr.length // 10arr [1000] = 'e'; arr.length // 1001
【2】 Saat mengatur atribut panjang ke integer non-negatif n lebih kecil dari panjang saat ini, elemen dengan nilai indeks array saat ini lebih besar dari atau sama dengan n akan dihapus darinya
a = [1,2,3,4,5]; // dari array dari 5 elemen a.length = 3; // Sekarang A adalah [1,2,3] a.length = 0; // Hapus semua elemen. A IS [] a.length = 5; // Panjangnya 5, tetapi tidak ada elemen, seperti halnya baru
Array (5)
[Catatan] Cara yang efektif untuk menghapus array adalah dengan mengatur properti panjang ke 0
var arr = ['a', 'b', 'c']; arr.length = 0; arr // []
【3】 Tetapkan nilai atribut panjang array menjadi lebih besar dari panjangnya saat ini. Sebenarnya ini tidak menambahkan elemen baru ke array, itu hanya menciptakan area kosong di akhir array
var a = ['a']; a.length = 3; console.log (a [1]); // undefinedconsole.log (1 dalam a); // false
Jika panjang diatur ke nilai ilegal (mis., Nilai di luar kisaran 0--232-2), JavaScript akan melaporkan kesalahan
// Set negative value[].length = -1// RangeError: Invalid array length// The number of array elements is greater than or equal to 2 to the power of 32[].length = Math.pow(2,32)// RangeError: Invalid array length// Set string[].length = 'abc'// RangeError: Invalid array length
Karena array pada dasarnya adalah objek, Anda dapat menambahkan atribut ke array, tetapi ini tidak mempengaruhi nilai atribut panjang
var a = []; a ['p'] = 'abc'; console.log (a.length); // 0a [2.1] = 'abc'; console.log (a.length); // 0
Array Traversal
Cara paling umum untuk mengulang melalui elemen array menggunakan untuk loop
var a = [1, 2, 3]; untuk (var i = 0; i <a.length; i ++) {console.log (a [i]);}Tentu saja, Anda juga dapat menggunakan loop sementara
var a = [1, 2, 3]; var i = 0; while (i <a.length) {console.log (a [i]); i ++;} var l = a.length; while (l--) {console.log (a [l]);}Tetapi jika array adalah array yang jarang, gunakan loop untuk dan Anda perlu menambahkan beberapa kondisi
// Lewati elemen yang tidak ada var a = [1 ,,, 2]; untuk (var i = 0; i <a.length; i ++) {if (! (I dalam a)) lanjutkan; console.log (a [i]);}Anda juga dapat menggunakan untuk/dalam loop untuk memproses array yang jarang. Loop menetapkan nama atribut yang dapat dihindarkan (termasuk indeks array) ke variabel loop sekaligus. Indeks yang tidak ada tidak akan dilalui
var a = [1 ,,, 2]; untuk (var i dalam a) {console.log (a [i]);}Karena loop FOR/IN dapat menyebutkan nama atribut yang diwariskan, seperti metode yang ditambahkan ke array.prototype. Untuk alasan ini, untuk/dalam loop tidak boleh digunakan pada array kecuali jika metode deteksi tambahan digunakan untuk menyaring sifat yang tidak diinginkan
var a = [1 ,,, 2]; ab = 'b'; for (var i in a) {console.log (a [i]); // 1 2 'b'} // lewati ivar a = [1 ,,, 2]; ab = 'b'; untuk (var i dalam a)) {if (string (math.floor (math.abs (bilangan Lanjutkan; Console.log (A [i]); // 1 2}Spesifikasi JavaScript memungkinkan untuk/dalam loop untuk melintasi sifat -sifat suatu objek dalam pesanan yang berbeda. Biasanya, implementasi traversal elemen array dalam urutan naik, tetapi tidak dapat dijamin seperti ini. Secara khusus, jika suatu array memiliki atribut objek dan elemen array, nama atribut yang dikembalikan kemungkinan dalam urutan yang dibuat daripada dalam urutan ukuran numerik. Jika algoritma tergantung pada urutan traversal, sebaiknya tidak digunakan untuk/masuk tetapi menggunakan reguler untuk loop
Array kelas
Objek dengan atribut panjang dan atribut integer non-negatif yang sesuai disebut objek seperti array
// Demonstrasi array kelas var a = {}; var i = 0; while (i <10) {a [i] = i*i; i ++;} a.length = i; var total = 0; untuk (var j = 0; j <a.length; j ++) {total+= a [j];}Ada tiga objek array kelas umum:
【1】 Argumen objek
// argumen fungsi objek args () {return argumen} var array like = args ('a', 'b'); array like [0] // 'a'array like.length // 2Array seperti instance dari array // false【2】 Objek yang dikembalikan dengan metode DOM (seperti Metode Document.GetElementsByTagname ())
// elemen dom var elts = document.geteLementsbyTagname ('h3'); elts.length // 3elts instanceof array // false【3】 string
// string 'abc' [1] // 'b''abc'.length // 3'abc' instance array // false
[Catatan] String adalah nilai yang tidak dapat diubah, jadi bila dilihat sebagai array, mereka hanya baca. Misalnya, push (), sortir (), reverse (), splice () dan metode array lainnya akan memodifikasi array. Mereka tidak valid pada string dan akan melaporkan kesalahan
var str = 'abc'; array.prototype.foreach.call (str, function (chr) {console.log (chr); // abc}); array.prototype.splice.call (str, 1); console.log (str); // typeError: tidak dapat menghapus properti '2' dari [objek string]]Metode irisan array mengubah objek array kelas menjadi array nyata
var arr = array.prototype.slice.call (seperti array);
Metode array JavaScript secara khusus didefinisikan sebagai umum, sehingga mereka bekerja dengan benar tidak hanya pada array nyata tetapi juga pada objek array kelas. Dalam ecmascript5, semua metode array bersifat umum. Dalam ecmascript3, semua metode kecuali tostring () dan tolocalestring () juga umum
var a = {'0': 'a', '1': 'b', '2': 'c', panjang: 3}; array.prototype.join.call (a, '+'); // 'a+b+c'array.p rototype.slice.call (a, 0); // ['a', 'b', 'c'] array.prototype.map.call (a, function (x) {return x.touppercase ();}); // ['a', 'b', 'c']