Rumah > hujung hadapan web > tutorial js > Mengapa JavaScript Menghasilkan Keputusan Yang Tidak Dijangka Apabila Menambah Tatasusunan dan Objek?

Mengapa JavaScript Menghasilkan Keputusan Yang Tidak Dijangka Apabila Menambah Tatasusunan dan Objek?

Patricia Arquette
Lepaskan: 2024-12-16 09:37:10
asal
629 orang telah melayarinya

Why Does JavaScript Produce Unexpected Results When Adding Arrays and Objects?

Memahami Gelagat Unik Penambahan JavaScript

Ceramah "Wat" untuk CodeMash 2012 telah mendedahkan beberapa gelagat yang membingungkan dalam JavaScript. Di sini, kami menyelidiki mekanisme asas dan menerangkan hasil yang diperhatikan dalam contoh JSFiddle.

Empty Array Empty Array

[] + []
result: ""
Salin selepas log masuk

Rentetan kosong yang terhasil daripada menyertai tatasusunan menyerlahkan bahawa operator menukar kedua-dua operan kepada primitif, memanggil keString() pada tatasusunan. Untuk tatasusunan kosong, penukaran ini menghasilkan rentetan kosong.

Objek Tatasusunan Kosong

[] + {}
result: [Object]
Salin selepas log masuk

Seperti sebelum ini, menukar tatasusunan kosong kepada primitif memberikan kita rentetan kosong. Walau bagaimanapun, objek dipaksa menjadi rentetan menggunakan kaedah toString()nya, menghasilkan "[Objek]." Rentetan ini digabungkan dengan rentetan kosong, menghasilkan "[Objek]."

Array Kosong Objek

{} + []
result: [Object]
Salin selepas log masuk

{} di sini ditafsirkan sebagai blok kosong, menghasilkan primitif kosong nilai. Operator kemudian cuba menukar objek kepada rentetan melalui toString(), yang membawa kepada "[Objek]." Walau bagaimanapun, tingkah laku ini adalah anomali, kerana video mencadangkan hasilnya hendaklah 0.

Objek Objek

{} + {}
result: [Object][Object]
Salin selepas log masuk

Sama seperti kes sebelumnya, objek dipaksa menjadi rentetan. Walau bagaimanapun, oleh kerana tiada operator unary, hasilnya tidak ditukar kepada nombor. Sebaliknya, gabungan "[Objek]" dan "[Objek]" dikembalikan.

Array(16).join("wat" - 1)

result: NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
Salin selepas log masuk

Menolak nombor daripada rentetan menghasilkan NaN. Apabila diluluskan sebagai hujah kepada Array.join, penukaran kepada rentetan (melalui toString()) menghasilkan "NaN." Kaedah join() tatasusunan kemudiannya berulang kali menggabungkan rentetan ini, membawa kepada hasil yang diperhatikan.

Kesimpulan

Tingkah laku pelik ini berpunca daripada peraturan khusus untuk menukar nilai kepada primitif dan gelagat pengendali dalam JavaScript. Walaupun sesetengah daripada mereka mungkin kelihatan berlawanan dengan intuisi, memahami mekanisme asas membolehkan pembangun menjangka dan mengendalikan kebiasaan ini dengan lebih baik dalam kod mereka sendiri.

Atas ialah kandungan terperinci Mengapa JavaScript Menghasilkan Keputusan Yang Tidak Dijangka Apabila Menambah Tatasusunan dan Objek?. 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