2016-03-02 28 views
5

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 ] } 

)

+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

Trả lời

11

from the documentation phương pháp Array.prototype.push() trả về chiều dài mảng , không phải bản thân mảng.

+0

Không nhận thấy đoạn mã đầu tiên. +1 –

+0

Đã xác nhận. [1,2,3] .push (60); // 4; [] .push (90); // 1; Cảm ơn. – anatta

Các vấn đề liên quan