Array tidak memiliki metode indeks, jadi lebih merepotkan untuk menemukan indeks elemen dalam array. Untuk memfasilitasi panggilan, array.prototype.indexof () diperluas melalui prototipe prototipe, yang lebih mudah digunakan. Namun, indeks kustom ini memiliki masalah saat melintasi array.
Salinan kode adalah sebagai berikut:
Array.prototype.indexof = function (item) {
untuk (var i = 0; i <this.length; i ++) {
if (ini [i] == item)
Kembalikan i;
}
kembali -1;
}
Saat menggunakannya, itu mudah
Salinan kode adalah sebagai berikut:
var arr = [1,2,3,4,5];
indeks var = arr.indexof (1); // index == 0
Setelah ekspansi, sangat menyegarkan dan nyaman untuk digunakan, dan itu adalah pemandangan yang harmonis ...
Tetapi ketika suatu kali berulang di atas elemen array, menggunakan for..in. Loop menyebabkan masalah lain dan memecahkan suasana yang harmonis.
Salinan kode adalah sebagai berikut:
var a = ["zhang fei", "guan yu", "liu bei", "lu bu"];
untuk (var p dalam a) {
document.write (p+"="+a [p]+"<br/>");
}
Awalnya saya ingin mengeluarkan nama -nama keempat orang ini, tetapi apa hasilnya?
Output sebenarnya:
Salinan kode adalah sebagai berikut:
// 0 = zhang fei
// 1 = Guan Yu
// 2 = liu bei
// 3 = lu bu
// indexof = function (item) {for (var i = 0; i <this.length; i ++) {if (this [i] == item) return i; } return -1; }
Selain mengetikkan namanya, itu juga menghasilkan indeks metode yang diperluas sendiri, tetapi yang gila adalah bahwa Firefox adalah "normal", dengan hanya empat nama orang. Mengapa ini terjadi?
Indeks output, yang diperpanjang dengan sendirinya, dapat dipahami. Lagi pula, untuk..dalam untuk mengulangi semua sifat yang ditentukan pengguna dari suatu objek atau semua elemen array.
Jadi mengapa Firefox tidak?
Setelah memeriksa informasinya, saya menyadarinya
Array sudah mendukung array.indexof () dalam versi javascript 1.6, sedangkan firefox yang saya gunakan adalah versi 3.5, yang sudah mendukung JavaScript 1.8. IndexOf adalah metode yang melekat pada array itu sendiri.
Adapun IE, bahkan jika saya menggunakan IE8, itu hanya mendukung versi JavaScript 1.3.
Oleh karena itu, IE8 percaya bahwa IndexOf adalah "atribut yang ditentukan pengguna", sementara Firefox percaya bahwa itu adalah atribut yang melekat yang didukung oleh dukungan asli sendiri.
Apakah ini masalahnya?
Lakukan percobaan, ubah indeks ke myindexof, dan coba lagi. Akibatnya, baik IE dan Firefox output myIndexOf, membuktikan bahwa poin sebelumnya benar.
Kemudian pertanyaan lain datang. Saya telah memperluas indeksof untuk waktu yang lama. Sekarang banyak kode proyek telah menggunakan metode ini. Sekarang saya harus menggunakan untuk..dalam output elemen array itu sendiri. Jangan memperluasnya sendiri ke metode Rusia sendiri. Apa yang harus saya lakukan?
Untungnya, JavaScript menyediakan metode HasownProperty.
Lihatlah deskripsinya:
Salinan kode adalah sebagai berikut:
Setiap objek yang diturunkan dari objek mewarisi metode HasownProperty. Metode ini dapat digunakan untuk menentukan apakah suatu objek memiliki properti yang ditentukan sebagai properti langsung dari objek itu; Berbeda dengan operator, metode ini tidak memeriksa rantai prototipe objek
Menilai dari deskripsi, itu yang kita inginkan.
Hanya membuat penilaian untuk ... di ...
Salinan kode adalah sebagai berikut:
if (a.hasownproperty (p)) {
document.write (p+"="+a [p]+"<br/>");
}
Selain itu, contoh penggunaan hasownproperty terlampir, yang berasal dari internet:
Salinan kode adalah sebagai berikut:
Buku fungsi (judul, penulis) {
this.title = judul;
this.author = penulis;
}
Book.prototype.price = 9.99;
Object.prototype.copyright = "herongyang.com";
var myBook = buku baru ("tutorial javascript", "herong yang");
// membuang properti bawaan di level prototipe dasar
document.writeln ("/nobject.prototype's built-in properties:");
DUMPPROPERTY (Object.Prototype, "Constructor");
DUMPPROPERTY (Object.Prototype, "HasownProperty");
DUMPPROPERTY (Object.Prototype, "Isprototypeof");
dumpproperty (objek.prototype, "tostring");
DUMPPROPERTY (Object.Prototype, "ValueOf");
DUMPPROPERTY (Object.Prototype, "Hak Cipta");
// membuang properti bawaan di level prototipe saya
document.writeln ("/n =======================/NBook.Prototype's built-in Properties:");
dumpproperty (book.prototype, "constructor");
dumpproperty (book.prototype, "hasownproperty");
DUMPPROPERTY (Book.Prototype, "Isprototypeof");
dumpproperty (book.prototype, "tostring");
dumpproperty (book.prototype, "valueof");
dumpproperty (book.prototype, "hak cipta");
// membuang properti bawaan di tingkat objek
document.writeln ("/n ========================/NMyBook's built-in Properties:");
Dumpproperty (MyBook, "Constructor");
DUMPPROPERTY (MYBOOK, "HASOWNPROPERTY");
dumpproperty (mybook, "isPrototypeOf");
dumpproperty (mybook, "tostring");
dumpproperty (mybook, "valueof");
DUMPPROPERTY (MyBook, "Hak Cipta");
function dumpproperty (objek, properti) {
var warisan;
if (objek.hasownproperty (properti))
warisan = "lokal";
kalau tidak
warisan = "warisan";
Document.writeln (properti+":"+warisan+":"
+objek [properti]);
}
Periksa versi JavaScript mana yang didukung oleh browser:
Salinan kode adalah sebagai berikut:
<! Doctype html public "-// w3c // dtd xhtml 1.0 transisi // en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv = "konten tipe" content = "text /html; charset = utf-8" />
<Title> Versi JavaScript dari browser mendukung pengujian </iteme>
</head>
<body>
<bahasa skrip = "javascript">
//document.write("sy Anda tipe browser Anda: "+navigator.appname+" <br/> ");
//document.write("Bowser versi: "+navigator.appversion+" <br/> ");
// browser yang mendukung JavaScript 1.0 dapat menjalankan skrip ini
Document.write ('Browser ini mendukung JavaScript1.0 <br/>');
</script>
<bahasa skrip = "javascript1.1">
// browser yang mendukung JavaScript 1.1 dapat menjalankan skrip ini
Document.write ('Browser ini mendukung JavaScript1.1 <br/>');
</script>
<bahasa skrip = "javascript1.2">
// browser yang mendukung JavaScript 1.2 dapat menjalankan skrip ini
Document.write ('Browser ini mendukung JavaScript1.2 <br/>');
</script>
<bahasa skrip = "javascript1.3">
// browser yang mendukung JavaScript 1.3 dapat menjalankan skrip ini
Document.write ('Browser ini mendukung JavaScript1.3 <br/>');
</script>
<bahasa skrip = "javascript1.4">
// browser yang mendukung JavaScript 1.4 dapat menjalankan skrip ini
Document.write ('Browser ini mendukung JavaScript1.4 <br/>');
</script>
<bahasa skrip = "javascript1.5">
// browser yang mendukung JavaScript 1.5 dapat menjalankan skrip ini
Document.write ('Browser ini mendukung JavaScript1.5 <br/>');
</script>
<bahasa skrip = "javascript1.6">
// browser yang mendukung JavaScript 1.6 dapat menjalankan skrip ini
Document.write ('Browser ini mendukung JavaScript1.6 <br/>');
</script>
<bahasa skrip = "javascript1.7">
// browser yang mendukung JavaScript 1.7 dapat menjalankan skrip ini
Document.write ('Browser ini mendukung JavaScript1.7 <br/>');
</script>
<bahasa skrip = "javascript1.8">
// browser yang mendukung JavaScript 1.8 dapat menjalankan skrip ini
Document.write ('Browser ini mendukung JavaScript1.8 <br/>');
</script>
<bahasa skrip = "javascript1.9">
// browser yang mendukung JavaScript 1.9 dapat menjalankan skrip ini
Document.write ('Browser ini mendukung JavaScript1.9 <br/>');
</script>
</body>
</html>