为什么这段代码不会遍历对象的所有属性?

时间:2015-12-11 22:48:43

标签: javascript

这是一个小代码片段:

cards = [ 4, 10, 3, 12, 10, 13, 12  ];
suits = [ 1, 64, 8, 8, 1, 1, 32 ];

var o = {}, keyCount = 0, j;

for (i = 0; i < cards.length; i++) {
    e = cards[i] + suits[i];
    o[e] = 1
}

for (j in o) {
    if (o.hasOwnProperty(j)) {
        keyCount++;
    }
}

经过一些调试后,我发现当我遍历&#39; o&#39;中的所有属性时object(第二个循环)循环只执行6次而不是7次。

尽管在&#39; o&#39;中添加了7个属性。第一个循环中的对象。

这是为什么?我在第一个循环中添加了7个属性,为什么第二个循环只执行6次?

1 个答案:

答案 0 :(得分:2)

原因不是因为数字12在扑克阵列中的两倍像Pointy在评论中所说的那样。他说,2个属性不能具有相同的值,这有助于我理解。我说的是e = cards[i] + suits[i];恰好有时这两个值加在一起有时总结为相同的答案。例如,在该示例中,3 + 8 = 11并且10 + 1也= 11