Mengapa aaa = 1,2,3
berhasil dan menetapkan nilai aaa
menjadi 1
?
Mengapa tidak var bbb = 1,2,3
berhasil?
Mengapa var bbb = (1,2,3)
berhasil dan menetapkan nilai bbb
menjadi 3
?
Mengapa aaa = 1,2,3
berhasil dan menetapkan nilai aaa
menjadi 1
?
Mengapa tidak var bbb = 1,2,3
berhasil?
Mengapa var bbb = (1,2,3)
berhasil dan menetapkan nilai bbb
menjadi 3
?
Jawaban:
Ada banyak hal yang terjadi di sini, tetapi pada dasarnya, ini tergantung pada operator koma .
Operator koma mengevaluasi kedua operannya (dari kiri ke kanan) dan mengembalikan nilai dari operan kedua.
Kode ini:
aaa = 1,2,3
Setara dengan:
aaa = 1;
2;
3;
Jadi aaa
secara implisit dideklarasikan dan diberi nilai 1. Perhatikan bahwa output pada konsol adalah hasil dari pernyataan terakhir, 3.
Kode ini:
var bbb = 1,2,3
Merupakan kesalahan sintaks karena koma dalam deklarasi variabel digunakan untuk mendeklarasikan beberapa variabel dalam satu baris. Seperti yang ditunjukkan artikel MDN,
Perhatikan bahwa koma dalam
var
pernyataan bukanlah operator koma, karena tidak ada dalam ekspresi. Sebaliknya, itu adalah karakter khusus dalamvar
pernyataan untuk menggabungkan beberapa darinya menjadi satu.
Jadi kode ini kira-kira sama dengan:
var bbb = 1;
var 2;
var 3;
Tentu saja, 2
ini bukan pengenal yang valid, jadi gagal pada saat itu.
Kode ini:
var bbb = (1,2,3)
Sangat mirip dengan yang pertama, kecuali karena nilai numerik dibungkus dalam tanda kurung, nilai tersebut dievaluasi terlebih dahulu. Jadi ini secara kasar setara dengan:
1;
2;
var bbb = 3;
=
in var bbb = 1;
tidak sama dengan =
in aaa = 1;
- mereka berasal dari produksi yang berbeda (Initialiser vs AssignmentExpression) dalam tata bahasa dan kebetulan menggunakan token yang sama.
a = 1, 2, 3
dapat diberi tanda kurung sebagai (a = 1), 2, 3
yang mengevaluasi sebagai a = 1; 2; 3
(dan mengembalikan 3, misalnya b = (a = 1, 2, 3)
akan menetapkan 3 ke b). Sebaliknya, a = (1, 2, 3)
mengevaluasi sebagai 1; 2; a = 3
dan mengembalikan 3.
(1 + 2) * 3
, 1 + 2
dievaluasi terlebih dahulu dan hasil dari ekspresi tersebut diganti kembali ke ekspresi luar untuk sisa evaluasi.
Koma memiliki banyak kegunaan dalam Javascript. Dalam ekspresi:
a = 1, 2, 3;
itu adalah operator yang hanya mengembalikan argumen tangan kanannya. Tapi itu juga bagian dari sintaks var
deklarasi, yaitu:
var var1 [ = val1 ], var2 [ = val2 ], var3 [ = val3 ], ...;
(di mana [...]
berarti bagian itu opsional). var
Deklarasi Anda kehilangan nama variabel setelah koma, jadi tidak dapat diurai. Anda bisa mendapatkan efek yang Anda inginkan dengan:
var a = (1, 2, 3);
Tanda kurung memaksa koma untuk diperlakukan sebagai operator daripada pembatas antara deklarasi variabel.
Dalam contoh Anda, koma digunakan dalam dua konteks:
var
pernyataanSintaks var
pernyataannya adalah:
var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
Di sini, koma digunakan untuk memisahkan pasangan nama-nilai variabel. Berikut ini tidak akan berfungsi karena nama variabel tidak boleh dimulai dengan digit (lihat nama pengenal ):
var bbb = 1, 2, 3;
// SyntaxError: Unexpected number
Operator koma mengevaluasi kedua operannya (dari kiri ke kanan) dan mengembalikan nilai dari operan kedua. Ekspresi berikut bekerja sebagai berikut:
aaa = 1, 2, 3;
aaa = 1, 2
hasil 2
aaa = 1
dievaluasi terlebih dahulu karena =
memiliki prioritas lebih tinggi dari,
2, 3
hasil 3var bbb = (1, 2, 3);
(1, 2, 3)
hasil ekspresi 3
seperti yang dijelaskan di atasbbb
diberi nilai3
aaa = 1, 2, 3
=> Operator koma digunakan untuk memisahkan 3 pernyataan berikut: aaa=1
, 2
dan 3
. Hasil dari operator koma adalah nilai dari pernyataan terakhir 3. Namun, aaa diberi nilai 1, seperti yang dapat dilihat dengan jelas dari tangkapan layar OP. Alasannya adalah Operator Prioritas, dengan Operator Koma memiliki prioritas terendah.
Dalam kasus pertama:
aaa = 1,2,3
koma berfungsi sebagai pemisah ekspresi. Ia melakukan tugas ke aaa
, lalu menghitung 2
dan membuangnya, lalu menghitung 3
dan membuangnya.
Detik:
var bbb = 1,2,3
Kata var
kunci memberitahu compiler Javascript bahwa hal berikutnya setelah a ,
harus menjadi nama variabel lain. Itu tidak ditemukan, jadi itu mati dan muntah.
var bbb = (1,2,3)
Di sini, kompilator pertama-tama mengevaluasi 1
dan mengabaikannya. Kemudian ia mengevaluasi 2
dan mengabaikannya. Kemudian mengevaluasi 3
dan yang tersisa di tumpukan sehingga ditugaskan kebbb
Meskipun tidak umum menggunakan koma untuk memisahkan ekspresi, ini terkadang berguna dalam hal-hal seperti for
penampilan.
for (i = 0, l = 10; i < l; i++) {
console.log(i);
}
var a1,a2,a3;
hanya akan mendeklarasikan tiga variabel lokal.