-1

可能重复:
console.log 中的值错误
|= 在 JavaScript 中的作用是什么?

好的,当我看到这个代码示例时,我正在阅读一篇关于为 Googles V8 引擎优化 JS 的文章......

我几乎略过它,但后来我看到了这个;|=; 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 年的网络开发人员,这让我和一位同事感到难过。

有人可以通过这段代码告诉我吗?

干杯。

4

3 回答 3

2

[15]它在每次迭代中显示的原因是因为console.log()输出是缓冲的,并且传递给它的对象或数组不会立即评估。

您的循环计算0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 915。

到时候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
于 2012-10-12T09:32:03.553 回答
1

|是按位或 更多信息在这里

于 2012-10-12T09:27:55.120 回答
0
  a[0] |= b; 

is equal to

  a[0] =  a[0]| b;  //bit wise operation
于 2012-10-12T09:26:59.490 回答