Gelagat JavaScript yang Membingungkan dalam Bual 'Wat'
Ceramah 'Wat' untuk CodeMash 2012 menyerlahkan beberapa gelagat pelik dalam JavaScript, dan ia adalah bernilai meneroka mereka untuk memahami apa yang berlaku di sebalik adegan.
[] []
Operator penambahan ( ) yang digunakan dengan tatasusunan kosong menukarkan operan kepada primitif dan bergabung dengannya. Oleh kerana nilai primitif lalai tatasusunan ialah rentetan kosong, hasil [] [] ialah rentetan kosong.
[] {}
Objek dalam JavaScript mempunyai toString() kaedah yang mengembalikan "[objek Objek]" apabila dipanggil. Oleh itu, [] {} menghasilkan objek, khususnya rentetan "[objek Objek]".
{} []
Apabila digunakan dalam pernyataan, {} dihuraikan sebagai blok kosong dan dengan itu mengembalikan tidak ditentukan. Operator memaksa operan yang tidak ditentukan kepada nombor, menghasilkan 0 untuk {} [] (manakala ceramah "Wat" menyebut ia sepatutnya NaN).
{} {}
Serupa kepada {} [], {} pertama dihuraikan sebagai blok kosong, mengakibatkan tidak ditentukan. Walau bagaimanapun, pengendali gagal untuk memaksa rentetan "[objek objek]" (nilai toString() {} kedua kepada nombor, menghasilkan NaN.
Array(16).join ("wat" - 1)
ToNumber() menukarkan "wat" - 1 kepada NaN, kerana penolakan nombor daripada rentetan menghasilkan nilai bukan angka. ToPrimitive() kemudian menukar NaN kepada rentetan "NaN", yang diulang 16 kali apabila menyertai elemen tatasusunan.
Kesimpulan
Gelagat yang kelihatan aneh ini berpunca daripada peraturan penukaran primitif JavaScript dan kaedah khusus yang dikaitkan dengan tatasusunan dan objek. Dengan memahami mekanisme asas ini, anda boleh mengelakkan keputusan yang tidak dijangka dan memanfaatkan kuasa penuh JavaScript.
Atas ialah kandungan terperinci Mengapa JavaScript Menghasilkan Keputusan Yang Tidak Dijangka dalam Operasi Aritmetik Pelik Ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!