следующий код: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 ] }
)
Ну, '[]' такой же, как 'Array.prototype', нет пустого массива, и вы не нажимаете ни на что внутри' obj'. Второй фрагмент кода - это правильный способ сделать это, где вы фактически создаете пустой массив. – adeneo