对未定义的变量进行操作 - 空合并

Operating on undefined variable - null coalescing

function add(num) { 
  var sum;
  for (var i = 1; i < num + 1; i++){
    sum = (sum || 0) + i;
  }; 
  return sum;     
}
add(9);

用于描述在 for 循环中将 sum 添加到 "i" 时定义 sum 的行为的关键字是什么?这是三元运算吗?很明显第一次循环是undefined,所以javascript选择了0,这是为什么呢?

"or" 运算符 || 的工作方式如下:

  • 如果第一个操作数是"truthy,",则返回第一个操作数。
  • 否则返回第二个操作数。

由于 undefined 不是 truthy,因此 sum || 0 在第一次循环时为零。

我不知道这种行为有专门的术语。 * 它只是一种初始化可能未预先初始化的变量的简便方法。在您的示例中,在开始时初始化变量会更有意义:

function add(num) { 
  var sum = 0;
  for (var i = 1; i < num + 1; i++){
    sum += i;
  }; 
  return sum;     
}


请注意,这与 conditional (ternary) operator:

无关
condition ? expr1 : expr2 


*归功于@joews,这个行为的术语:"null coalescing"

但请注意他的警告:

It's a common logic bug to use this pattern where the first operand could legitimately be falsy. Never use var a = b || c where, say, 0 is a valid value for b.