Neden aaa = 1,2,3
çalışır ve değerini aaa
olarak belirler 1
?
Neden çalışmıyor var bbb = 1,2,3
?
Neden var bbb = (1,2,3)
çalışır ve değerini bbb
olarak belirler 3
?
Neden aaa = 1,2,3
çalışır ve değerini aaa
olarak belirler 1
?
Neden çalışmıyor var bbb = 1,2,3
?
Neden var bbb = (1,2,3)
çalışır ve değerini bbb
olarak belirler 3
?
Yanıtlar:
Burada çok şey oluyor, ama temelde virgül operatörüne geliyor .
Virgül operatörü her iki işlenenini de (soldan sağa) değerlendirir ve ikinci işlenenin değerini döndürür.
Bu kod:
aaa = 1,2,3
Eşittir:
aaa = 1;
2;
3;
Dolayısıyla aaa
dolaylı olarak bildirilir ve 1 değeri atanır. Konsoldaki çıktının son ifade olan 3'ün sonucu olduğuna dikkat edin.
Bu kod:
var bbb = 1,2,3
Bu bir sözdizimi hatasıdır çünkü değişken bildirimlerindeki virgüller tek bir satırda birden çok değişkeni bildirmek için kullanılır. MDN makalesinin işaret ettiği gibi,
Virgülle geldiğini hatırlatırız
var
deyimi ise değil bir ifadenin içinde var olmadığı için, virgül operatörü. Aksine,var
ifadelerde birden çok ifadeyi tek bir karakterde birleştirmek özel bir karakterdir .
Dolayısıyla bu kod kabaca şuna eşdeğerdir:
var bbb = 1;
var 2;
var 3;
Tabii ki, 2
geçerli bir tanımlayıcı değildir, bu yüzden o noktada başarısız olur.
Bu kod:
var bbb = (1,2,3)
Birincisine çok benzer, ancak sayısal değerler parantez içine alındığı için önce değerlendirilir. Yani bu, genel olarak şuna eşdeğerdir:
1;
2;
var bbb = 3;
=
içinde var bbb = 1;
değil aynı =
olduğu gibi aaa = 1;
- onlar gramer farklı üretimler (AssignmentExpression vs Başlatıcı) gelip sadece aynı belirteci kullanmak olur.
a = 1, 2, 3
olarak (a = 1), 2, 3
değerlendirilen a = 1; 2; 3
(ve 3'ü döndüren, örneğin b = (a = 1, 2, 3)
3'ten b'ye atanacak) parantez içine alınabilmesiydi . Bunun aksine, olarak a = (1, 2, 3)
değerlendirir 1; 2; a = 3
ve 3
(1 + 2) * 3
, 1 + 2
ilk önce değerlendirilir ve bu ifadenin sonucu, değerlendirmenin geri kalanı için dış ifadeye geri yerleştirilir.
Virgülün Javascript'te birden çok kullanımı vardır. İfadede:
a = 1, 2, 3;
bu, sağ taraftaki argümanını döndüren bir operatördür. Ama aynı zamanda var
bildirimler sözdiziminin de bir parçasıdır , bunlar:
var var1 [ = val1 ], var2 [ = val2 ], var3 [ = val3 ], ...;
(burada [...]
bu bölümün isteğe bağlı olduğu anlamına gelir). Sizin var
o ayrıştırmak değil bu yüzden beyannamesi, virgül sonrası değişken isimleri eksik. İstediğiniz efekti elde edebilirsiniz:
var a = (1, 2, 3);
Parantezler, virgüllerin değişken bildirimleri arasında sınırlayıcılar yerine işleçler olarak ele alınmasını zorlar.
Örneklerinizde virgül iki bağlamda kullanılmaktadır:
var
Beyanİfade sözdizimi var
şöyledir:
var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
Burada, değişken isim-değer çiftlerini ayırmak için virgül kullanılır. Bir değişken adı bir rakamla başlayamayacağı için aşağıdakiler çalışmayacaktır ( tanımlayıcı adlarına bakın ):
var bbb = 1, 2, 3;
// SyntaxError: Unexpected number
Virgül operatörü her iki işlenenini de (soldan sağa) değerlendirir ve ikinci işlenenin değerini döndürür. Aşağıdaki ifadeler şu şekilde çalışır:
aaa = 1, 2, 3;
aaa = 1, 2
2 verir
aaa = 1
, çünkü =
daha yüksek önceliğe sahiptir.,
2, 3
3 verirvar bbb = (1, 2, 3);
(1, 2, 3)
verir3
bbb
değer atanır3
aaa = 1, 2, 3
=> Virgül işlemci aşağıdaki 3 ifadeleri ayırmak için kullanılır: aaa=1
, 2
ve 3
. Virgül operatörünün sonucu, son ifade 3'ün değeridir. Ancak, aaa'ya, OP'nin ekran görüntüsünden açıkça görülebileceği gibi 1 değeri atanır. Bunun nedeni, Virgül Operatörünün en düşük önceliğe sahip olduğu Operatör Önceliğidir.
İlk durumda:
aaa = 1,2,3
virgül, ifade ayırıcı görevi görür. Bir atama yapar aaa
, sonra hesaplar 2
ve atar, sonra hesaplar 3
ve atar.
Saniyede:
var bbb = 1,2,3
var
Anahtar kelime bir sonraki şey JavaScript derleyicisi söyler ,
başka değişken adı olmalıdır. Bulamıyor, bu yüzden ölüyor ve tıkanıyor.
var bbb = (1,2,3)
Burada, derleyici önce 1
onu değerlendirir ve yok sayar. Sonra değerlendirir 2
ve görmezden gelir. Sonra değerlendirir 3
ve bu yığında kalır, böylece atanırbbb
İfadeleri ayırmak için virgül kullanmak yaygın olmasa da bazen for
görünüm gibi şeylerde yararlıdır .
for (i = 0, l = 10; i < l; i++) {
console.log(i);
}
var a1,a2,a3;
basitçe üç yerel değişken bildirecektir.