对未定义的变量进行操作 - 空合并
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
.
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 forb
.