2016-03-02 40 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 documentationArray.prototype.push()方法返回數組的長度,而不是陣列本身。

+0

沒有注意到第一個片段。 +1 –

+0

確認。 [1,2,3] .push(60); // 4; [] .push(90); // 1;謝謝。 – anatta