可能重复:
Wrong value in console.log
What |= does in JavaScript?
好的,当我看到这个代码示例时,我正在为GOogles V8引擎优化JS reading an article ...
我差点撇去它,但后来我看到了这个; | =; a [0] | = b;
a = new Array();
a[0] = 0;
for (var b = 0; b < 10; b++) {
console.log(a, b)
a[0] |= b; // Much better! 2x faster.
}
a [0] | = b;
所以我在我的控制台中运行它,在循环中使用console.log并导致15;
[15] 0
[15] 1
[15] 2
[15] 3
[15] 4
[15] 5
[15] 6
[15] 7
[15] 8
[15] 9
什么?!?!在每次迭代中,它到底在哪里得到15???!?!
我已经成为一名网络开发者已有7年了,这让我和同事感到难过。
有人可以通过这段代码跟我说说吗?
干杯。
答案 0 :(得分:2)
在每次迭代中显示[15]
的原因是因为缓存了console.log()
输出,并且不会立即计算传递给它的对象或数组。
你的循环计算0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
,即15。
当console.log()
到达调用a.toString()
时,循环已经完成,因此它显示最终结果为15,而不是中间结果。
如果您每次看到实际结果时都记录了a[0]
而不是a
,因为原始值会立即被评估:
a = new Array();
a[0] = 0;
for (var b = 0; b < 10; b++) {
console.log(a[0], b)
a[0] |= b; // Much better! 2x faster.
}
0 0
0 1
1 2
3 3
3 4
7 5
7 6
7 7
7 8
15 9
答案 1 :(得分:1)
|
是按位OR
more info here
答案 2 :(得分:0)
a[0] |= b;
is equal to
a[0] = a[0]| b; //bit wise operation