javascript:意外行为推入空数组

时间:2016-03-02 19:45:21

标签: javascript arrays push

以下代码:

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

1 个答案:

答案 0 :(得分:11)

因为from the documentation Array.prototype.push()方法返回数组长度,而不是数组本身。