0
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 的行为的关键字是什么?这是三元运算吗?显然它第一次循环是未定义的,所以 javascript 选择 0。这是为什么呢?

4

1 回答 1

7

“或”运算符的||工作方式如下:

  • 如果第一个操作数是“真”,则返回第一个操作数。
  • 否则,返回第二个操作数。

由于undefinedis not truthysum || 0第一次通过循环为零。

我不知道这种行为有一个特定的术语。* 这只是一种初始化可能尚未预初始化的变量的便捷方式。在您的示例中,在开始时初始化变量会更有意义:

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


请注意,这与条件(三元)运算符 无关:

condition ? expr1 : expr2 


* 归功于@joews,这种行为有一个术语:“空合并”

但请注意他的警告:

使用这种模式是一个常见的逻辑错误,其中第一个操作数可能合法地是假的。永远不要使用var a = b || cwhere,例如,0是 的有效值b

于 2015-04-12T20:40:26.587 回答