Rumah > hujung hadapan web > tutorial js > Mengapa Lelaran `untuk...dalam` Kadangkala Termasuk Sifat Tidak Dijangka, dan Bagaimana Saya Boleh Mengelak Perkara Ini?

Mengapa Lelaran `untuk...dalam` Kadangkala Termasuk Sifat Tidak Dijangka, dan Bagaimana Saya Boleh Mengelak Perkara Ini?

Patricia Arquette
Lepaskan: 2024-12-24 12:49:11
asal
245 orang telah melayarinya

Why Does `for...in` Iteration Sometimes Include Unexpected Properties, and How Can I Avoid This?

Membalas Sifat Objek: Menyingkap Misteri Propt

Apabila melelaran melalui sifat objek menggunakan gelung untuk...dalam, pembolehubah yang dikenali sebagai propt muncul. Pembolehubah ini mewakili setiap kunci sifat objek. Tetapi mengapa ia berfungsi dengan cara ini?

Sebabnya ialah Object.prototype mengandungi sifat tambahan yang diwarisi oleh semua objek. Sifat ini bukan sebahagian daripada objek tertentu tetapi dikongsi oleh semua objek. Sebagai contoh, toString dan hasOwnProperty ialah dua contoh biasa.

Untuk mengelak daripada mengulang sifat warisan ini secara tidak sengaja, adalah penting untuk memasukkan semakan tambahan: Object.prototype.hasOwnProperty.call(obj, prop). Semakan ini memastikan bahawa sifat yang diulang adalah milik objek secara khusus dan belum diwarisi daripada kelas asas.

Untuk kejelasan, berikut ialah contoh kod yang dikemas kini:

for (var prop in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, prop)) {
        // do stuff
    }
}
Salin selepas log masuk

Selain itu, walaupun mungkin untuk menggunakan obj.hasOwnProperty(prop) sebaliknya, kaedah ini mungkin tidak berfungsi jika objek mempunyai medan yang tidak berkaitan dengan nama yang sama. Oleh itu, memanggil hasOwnProperty melalui Object.prototype lebih dipercayai.

Atas ialah kandungan terperinci Mengapa Lelaran `untuk...dalam` Kadangkala Termasuk Sifat Tidak Dijangka, dan Bagaimana Saya Boleh Mengelak Perkara Ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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