2016-03-02 2 views
5

следующий код:JavaScript: неожиданное поведение толкая в пустой массив

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); 
} 

были получены следующие результаты:

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

и я бы просто любезно хотел бы знать, почему.

(я знаю теперь, что следующий код:

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); 
    } 
} 

даст мне нужный мне результат:

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

)

+2

Ну, '[]' такой же, как 'Array.prototype', нет пустого массива, и вы не нажимаете ни на что внутри' obj'. Второй фрагмент кода - это правильный способ сделать это, где вы фактически создаете пустой массив. – adeneo

ответ

11

Поскольку from the documentation метод Array.prototype.push() возвращает длину массива , а не сам массив.

+0

Не заметил первый фрагмент. +1 –

+0

Подтверждено. [1,2,3] .push (60); // 4; [] .push (90); // 1; Благодарю. – anatta

Смежные вопросы