Di es6, Anda dapat menggunakan metode isArray() Array untuk menentukan apakah suatu variabel adalah array. Metode ini digunakan untuk menentukan apakah suatu objek bertipe array. Sintaksnya adalah "Array.isArray(obj)"; sebuah array, ia mengembalikan nilai benar, jika tidak, ia mengembalikan salah.
Lingkungan pengoperasian tutorial ini: sistem Windows 7, ECMAScript versi 6, komputer Dell G3.
Menentukan apakah suatu variabel merupakan array di ES5 Di ES5
, kita memiliki setidaknya 5 cara berikut untuk menentukan apakah suatu nilai adalah array:
var a = []; // 1. Berdasarkan instanceof sebuah instance dari Array; // 2. Berdasarkan konstruktor a.konstruktor === Array; // 3. Berdasarkan Object.prototype.isPrototypeOf Array.prototype.isPrototypeOf(a); // 4. Berdasarkan getPrototypeOf Objek.getPrototypeOf(a) === Array.prototype; // 5. Berdasarkan Objek.prototipe.toString Object.prototype.toString.apply(a) === '[object Array]';
Di atas, kecuali Object.prototype.toString
, metode lain tidak dapat menentukan tipe variabel dengan benar.
Anda tahu, lingkungan kode yang berjalan sangat kompleks, dan sebuah variabel dapat menggunakan segala macam trik untuk membingungkan pembuatnya. Mari kita lihat
var a = { __proto__: Array.prototipe }; //Coba jalankan kode berikut di konsol masing-masing // 1. Berdasarkan instanceof sebuah contoh Array; // => benar // 2. Berdasarkan konstruktor a.konstruktor === Array; // => benar // 3. Berdasarkan Object.prototype.isPrototypeOf Array.prototype.isPrototypeOf(a); // => benar // 4. Berdasarkan getPrototypeOf Object.getPrototypeOf(a) === Array.prototype; // => true
di atas, keempat metode akan mengembalikan nilai true. Kami baru saja secara manual menentukan atribut __proto__ suatu objek sebagai Array.prototype, yang menyebabkan objek tersebut mewarisi objek Array yang tidak bertanggung jawab ini menyebabkan skema penilaian berdasarkan warisan langsung runtuh.
Tidak hanya itu, kita juga mengetahui bahwa Array adalah heap data, dan variabelnya hanya menunjuk ke alamat referensinya saja, sehingga alamat yang direferensikan oleh objek Array setiap halaman berbeda-beda. Untuk array yang dideklarasikan dalam iframe, konstruktornya adalah objek Array di iframe. Jika array x dideklarasikan di iframe dan ditetapkan ke variabel y di halaman induk, maka instanceof Array y digunakan di halaman induk, dan hasilnya harus salah. Yang terakhir mengembalikan string, jadi tidak ada masalah referensi. Faktanya, interaksi antara beberapa halaman atau sistem hanya dapat dilakukan dengan string.
Menentukan apakah suatu variabel merupakan array di ES6
. Mengingat penggunaan umum array, metode Array.isArray ditambahkan di ES6. Menggunakan metode ini untuk menentukan apakah suatu variabel adalah array sangatlah sederhana, sebagai berikut:
Array.isArray ([]); // => benar Array.isArray({0: 'a', length: 1}); // => false
Faktanya, menggunakan Object.prototype.toString
untuk menentukan tipe suatu nilai juga merupakan standar untuk perpustakaan umum utama. Oleh karena itu polyfill untuk Array.isArray biasanya terlihat seperti ini:
if (!Array.isArray){ Array.isArray = fungsi(arg){ return Objek.prototipe.toString.call(arg) === '[Array objek]'; }; }