Enigma Keutamaan Operator: Operator Ternary dan Penggabungan JavaScript
Penggunaan operator ternary dalam JavaScript boleh membingungkan, terutamanya apabila bercampur dengan yang lain pengendali. Pertimbangkan coretan kod berikut:
h.className += h.className ? ' error' : 'error'
Tujuan kod ini adalah untuk menambahkan rentetan ' ralat' pada sifat className bagi elemen HTML 'h'. Walau bagaimanapun, kod tersebut gagal dengan ralat. Untuk memahami sebabnya, kita perlu membedah keutamaan operator dalam JavaScript.
Pengendali ternary (?:) mempunyai keutamaan yang lebih tinggi daripada operator tugasan (=). Oleh itu, kod di atas adalah bersamaan dengan:
h.className = h.className + (h.className ? ' error' : 'error')
Tafsiran ini lebih masuk akal. Operator ternary menyemak sama ada h.className bukan batal atau tidak ditentukan (nilai "benar"). Jika benar, ia menambahkan 'ralat' pada h.className. Jika tidak, ia menambahkan 'ralat'.
Untuk membetulkan kod asal, kami perlu menambah operator tugasan dalam kurungan secara eksplisit:
h.className = h.className + (h.className ? ' error' : 'error')
Dengan meletakkan operator tugasan dalam kurungan, kami membatalkan peraturan keutamaan dan pastikan keseluruhan ungkapan ternary diberikan kepada h.className.
Atas ialah kandungan terperinci Mengapa Kod JavaScript Saya Gagal dengan `h.className = h.className ? \' ralat\' : \'ralat\'`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!