var counts = {};
var your_array = ['a', 'a', 'b', 'c'];
your_array.forEach(function(x) {
counts[x] = (counts[x] || 0) + 1;
});
console.log(your_array);
在javascript中,为什么必须counts[x] = (counts[x] || 0) + 1;
为什么没有counts[x] += 1;
工作?
这将输出{ a: 2, b: 1, c: 1}
,但为什么?
答案 0 :(得分:2)
如果counts[x]
为undefined
,则会出现问题。在这种情况下,增量不起作用。逻辑"或" (||
)评估左侧的值,如果该值为假,则采用正确的部分。
例如,如果你分开这行,就得到
counts[x] || 0
返回counts[x]
的真值,undefined
,false
,null
,偶数0
,然后返回值0
的右边部分1}}。
添加和分配应该清楚。
从MDN开始:
在JavaScript中, truthy 值是在布尔上下文中计算时转换为true的值。所有值都是真实的,除非它们被定义为假(即
false
,0
,""
,null
,undefined
和{{1}除外})。