Lebih
Mengapa -1**2 kesalahan sintaks dalam JavaScript?
Dijalankan di konsol browser ia mengatakan SyntaxError: Unexpected token **
.
Mencoba itu di node:
> -1**2
...
...
...
...^C
Saya pikir ini adalah sebuah ekspresi aritmatika di mana **
adalah tenaga operator. Tidak ada masalah dengan operator lain.
Anehnya, mengetik */
pada baris kedua pemicu eksekusi:
> -1**2
... */
-1**2
^^
SyntaxError: Unexpected token **
Apa yang terjadi di sini?
56
2
Karena itu's spec. Dirancang seperti itu untuk menghindari kebingungan tentang apakah itu's kuadrat dari negasi dari satu (yaitu
(-1) ** 2
), atau negasi dari alun-alun dari satu (yaitu-(1 ** 2)
). Desain ini adalah hasil dari diskusi yang luas dari operator didahulukan, dan pemeriksaan cara ini ditangani dalam bahasa lain, dan akhirnya keputusan itu dibuat untuk menghindari perilaku tak terduga dengan membuat ini sebuah kesalahan sintaks.Dari dokumentasi pada MDN:
Alasan ini juga dijelaskan dalam teks yang sama:
Sehingga untuk menghindari kebingungan itu diputuskan bahwa kode harus menghapus ambiguitas dan secara eksplisit menempatkan tanda kurung:
atau:
Sebagai catatan, biner
-
tidak diobati dengan cara itu -- yang memiliki prioritas lebih rendah-dan begitu ekspresi terakhir memiliki hasil yang sama seperti ini ekspresi valid:Eksponensial Didahulukan dalam Bahasa Pemrograman yang Lain.
Seperti yang sudah ditegaskan dalam kutipan di atas, sebagian besar bahasa pemrograman yang memiliki infix eksponensial operator, memberikan lebih diutamakan untuk itu operator dari ke unary minus.
Berikut ini adalah beberapa contoh lain dari bahasa pemrograman yang memberikan lebih diutamakan untuk operator unary minus: