Các mã sau đây:javascript: Hành vi bất ngờ đẩy vào mảng trống
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);
}
sản xuất đầu ra sau đây:
obj1
=> { '0': 1, '1': 1, '2': 1 }
và tôi sẽ chỉ lòng muốn biết lý do tại sao.
(Tôi biết bây giờ mà các đoạn mã sau:
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);
}
}
sẽ cho tôi kết quả mong muốn của tôi:
obj1
=> { '0': [ 0 ], '1': [ 1 ], '2': [ 2 ] }
)
Vâng, '[]' giống với 'Array.prototype', không có mảng trống và bạn không đẩy bất kỳ thứ gì vào trong' obj'. Đoạn mã thứ hai là cách thực hiện đúng, nơi bạn thực sự tạo một mảng trống – adeneo