2016-03-02 4 views
5

Der folgende Code:javascript: unerwartetes Verhalten in leere Array schieben

var arr1 = [1,2,3]; 
var obj1 = {}; 

for (var j = 0; j < arr1.length; j++) { 
    if (obj1[j.toString()]) 
     obj1[j.toString()] = obj1[j.toString()].push(j) 
    else 
     obj1[j.toString()] = [].push(j); 
} 

erzeugt die folgende Ausgabe:

obj1 
=> { '0': 1, '1': 1, '2': 1 } 

und ich möchte nur freundlich wissen, warum.

(ich bin jetzt bewusst, dass der folgende Code:

var arr1 = [1,2,3]; 
var obj1 = {}; 

for (var j = 0; j < arr1.length; j++) { 
    if (obj1[j.toString()]) 
     obj1[j.toString()] = obj1[j.toString()].push(j) 
    else { 
     obj1[j.toString()] = []; 
     obj1[j.toString()].push(j); 
    } 
} 

geben mir meine gewünschte Ausgabe:

obj1 
=> { '0': [ 0 ], '1': [ 1 ], '2': [ 2 ] } 

)

+2

Nun, '[]' ist das gleiche wie 'Array.prototype', es gibt kein leeres Array, und Sie drängen nicht auf irgendwas in' obj'. Das zweite Code-Snippet ist der richtige Weg, es zu tun, wo Sie tatsächlich ein leeres Array erstellen – adeneo

Antwort

11

Da from the documentation die Array.prototype.push() Methode, um die Array-Länge zurückgibt , nicht das Array selbst.

+0

Das erste Snippet nicht bemerkt. +1 –

+0

Bestätigt. [1,2,3] .Push (60); // 4; []. Drücken (90); // 1; Vielen Dank. – anatta