0

我不明白这个速记是如何工作的:

nodes.forEach(function(o, i) {
    o.y += i & 1 ? k : -k;
    o.x += i & 2 ? k : -k;
});

我从未见过这样的简写增量运算符。

谢谢

4

2 回答 2

2

表达式的i & 1 ? k : -k计算结果为k-k取决于是否i & 1计算结果true

运算符在&运算符之间执行按位“与”,因此第一个条件检查是否设置了最低有效位,第二个条件检查是否设置了第二个最低有效位。

代码与以下内容相同:

nodes.forEach(function(o, i) {
  if (i & 1) {
    o.y += k;
  } else {
    o.y -= k;
  }
  if (i & 2) {
    o.x += k;
  } else {
    o.x -= k;
  }
});
于 2013-03-08T17:19:49.887 回答
1

10000...0001

20000...0010

i可能将一组标志设置为 int 上的位。

i & 1只需测试最后一位是否设置并i & 2测试前一位是否已设置。请参阅MDN 上的按位运算符

您可以使用此系统在一个 javascript 编号中存储大约 52 个标志:

i = 0; // no flag
i |= 4; // sets a flag
i |= 1<<2; // sets the same flag but is more readable
var bool = i & 4; // truish if the flag is set

所以你的代码这样做:

if i has flag 1 then o.y += k else o.y += -k
if i has flag 2 then o.x += k else o.x += -k
于 2013-03-08T17:13:41.413 回答