操作未定义的变量-null合并


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。为什么?

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

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

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

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

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


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

condition ? expr1 : expr2 


*值得称赞的是@joews,有一个术语来描述这种行为:"零合并">

但请注意他的警告:

在第一个操作数可以合法地说是虚伪的。不要在0所在的位置使用var a = b || cCCD_ 6的有效值。

最新更新