2016-03-22 33 views
2

this answer'u bir meydan okuma için şaşırdım, çünkü bu sözdiziminin yasal olduğunu bilmiyordum. Yani, bu benzeyen bölüm (Ben biraz basitleştirilmiş):Nesne anahtarı olarak dizi değişmezi?

"eo"[0,g=()=>{},g(),g(),1] 

Bana göre bu bir nesne anahtarı erişmek için kullanılıyor değişmez bir dizi gibi görünüyor. Bu belgelenmiş davranış JavaScript’te mi? Kayıt için, dizinin son değeri dereferced olunan şey gibi görünüyor.

+1

bu durumda köşeli parantez bir özellik erişimci yerine değişmez bir dizi olarak çözümlenir. Virgüller, [virgül operatörü] olarak ayrıştırılır (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Comma_Operator). –

cevap

1

access dizesinin access için comma operator kullanımı temel olarak bu o değerini döndürür ve arada bir şey yapar. bölgelerinde

:

"eo"      string 
    [      bracket operator/string accessor 
    0,      value 0 
     g=()=>{},   generating an empty function 
       g(),  call that function 
        g(), call that function again 
         1 take 1 as the last element of comma operator 
         ] return 'o' 
+1

Diğer bölümler beni şaşırtmadı, habersiz olduğum tek bölüm, bir mülk erişimcisindeki virgül operatörünün yasallığıydı. Bu arada, bu işlev boş bir nesne değil, 'undefined' i döndürür. –

+1

'g =() => {}', "boş" işlevini * g * olarak adlandırdığında, çağrıldığında, tanımsız olarak döndürür. '{}},'() 'Parantezinin sıfır veya çoklu olması durumunda argümanları tanımlamak için gerekli olduğu şekilde, bir gövde (veya çoklu ifade) yoksa bir ok işlevinin işlev gövdesini tanımlamak için gereklidir. – RobG

İlgili konular