1. Metode menilai array nyata
Cara termudah untuk mendeklarasikan array di JavaScript adalah:
var a = [];
Cara paling langsung untuk menentukan apakah itu array adalah:
Salinan kode adalah sebagai berikut:
Sebuah contoh array // true
a.constructor == array // true
Inilah contoh sintaksis. Instanceof adalah operator cloud. Seperti "+-*/", sintaksinya adalah sebagai berikut:
hasil = obj intance dari kelas
Ini digunakan untuk menentukan apakah suatu objek adalah instance dari suatu kelas, dan hasil operasi mengembalikan benar atau salah. Definisi kelas dalam JavaScript diinisialisasi melalui konstruktor, sehingga operator yang tepat dari instance dari sintaks harus berupa instance fungsi, yaitu, instance kelas fungsi harus benar, dan jika operator yang tepat bukan fungsi saat menggunakan instanceof, pengecualian typeError akan dilemparkan. Semua objek adalah instance objek, jadi objek apa pun objek objek mengembalikan true. Meskipun kami mengatakan bahwa objek diinisialisasi melalui konstruktor, Instanceof tidak memeriksa apakah objek dibangun oleh fungsi, tetapi diwarisi oleh prototipe konstruktor. Contoh berikut dapat menggambarkan masalah ini:
Salinan kode adalah sebagai berikut:
rentang fungsi (rendah, tinggi) {
this.low = rendah;
this.high = tinggi;
}
Range.prototype.constructor == range; //BENAR
Range.prototype = {
Incert: function (x) {return (x> = this.low && x <= this.high); },
Exclude: function (x) {return (x <this.low && x> this.high); }
}
var r = rentang baru (0, 100);
R Kisaran Rentang; //PALSU
r instance dari objek; //BENAR
Range.prototype.constructor == objek; //BENAR
Meskipun R dibangun melalui rentang baru, R bukanlah contoh jangkauan. Inilah masalahnya. Pernyataan penugasan range.prototype mengesampingkan konstruktor default. Sebelum prototipe ditetapkan, range.prototype.constructor adalah rentang, dan setelah penugasan dibuat, itu menjadi objek. Ini mudah dimengerti karena
Salinan kode adalah sebagai berikut:
Range.prototype = {
Incert: function (x) {return (x> = this.low && x <= this.high); },
Exclude: function (x) {return (x <this.low && x> this.high); }
}
Sebenarnya setara dengan:
Salinan kode adalah sebagai berikut:
Range.prototype = objek baru ({
Incert: function (x) {return (x> = this.low && x <= this.high); },
Exclude: function (x) {return (x <this.low && x> this.high); }
});
Jadi range.prototype.constructor == Objek, lalu contoh yang dibuat melalui rentang baru tentu saja merupakan instance dari objek.
Lebih langsung melihat penjelasan resmi:
Contoh operator tidak benar -benar memeriksa apakah R diinisialisasi oleh rentang konstruktor. Itu memeriksa apakah itu mewarisi dari range.prototype.
Ada juga tipe fungsi dari JavaScript yang memiliki fungsi yang sama dengan instanceof, tetapi mengembalikan tipe data dasar tertentu: angka, string, fungsi, objek, tidak terdefinisi, boolean. Hanya ada enam jenis ini, dan yang tidak ada dalam enam jenis ini, yaitu, TypeOf ([]) mengembalikan objek, bukan array.
Sintaks lain yang terlibat adalah konstruktor, konstruktor mengembalikan konstruktor objek:
Salinan kode adalah sebagai berikut:
var a = [];
A.Constructor; // array
Konstruktor adalah fungsi inisialisasi objek, yang menggunakan panggilan baru. Jika objek adalah array, maka konstruktornya harus menjadi array, dan kelas yang Anda tulis tidak selalu benar, karena konstruktor dalam prototipe dapat diubah.
2. Metode menilai pseudo array
Ada pseudo array di JavaScript. Ini dapat dilintasi menggunakan metode traversal yang mirip dengan array. Ini memiliki atribut panjang untuk mendapatkan panjang elemen. Anda dapat menggunakan subscript [] untuk mendapatkan elemen yang ditentukan. Kami menyebut objek semacam ini sebagai pseudo-array. Objek dalam jQuery adalah pseudo-array yang khas, seperti yang ditunjukkan pada gambar di bawah ini:
Oleh karena itu, kunci untuk menilai apakah itu adalah array pseudo adalah menilai apakah ada atribut panjang dan apakah ada sambungan fungsi operasi array dasar. Berikut ini adalah metode penilaian:
Salinan kode adalah sebagai berikut:
var is_array = function (value) {
nilai kembali &&
typeOf value === 'objek' &&
typeOf value.length === Number '&&
typeof value.splice === 'function' &&
! (value.propertyisenumerable ('length'));
};
Di sini properti yang dapat digunakan untuk menentukan apakah properti panjang itu dapat dihitung. Faktanya, objek string asli juga memiliki efek array, tetapi kita tidak dapat memperlakukannya sebagai objek array, jadi kita perlu menilai tipe nilai == "objek", karena tipe Objek String mengembalikan string.