在JavaScript中什么情况下可以/适合使用逻辑赋值?

13 浏览
0 Comments

在JavaScript中什么情况下可以/适合使用逻辑赋值?

以前我在JavaScript中使用过像b = a || []这样的逻辑赋值,关于这个问题在Stack Overflow上有很多讨论。

举几个例子:

根据我所读的,b = a || []是合法的代码。

然而,最近我注意到在一个情况下(检查另一个脚本设置的变量),这段代码并不像我预期的那样工作。

我以为这段代码会检查a是否为假值,如果是的话,[]会被赋值给b。由于undefined是假值,我期望这段代码在a未定义的情况下能工作并将[]赋值给b

但是这段代码会导致错误:

let b;
b = a || [];
console.log(b);
a = ["1", "2", "3"];
b = a || [];
console.log(b);

而这段代码却不会:

let b;
b = typeof a == "undefined" ? [] : b;
console.log(b);
a = ["1", "2", "3"];
b = a || [];
console.log(b);

为什么会导致错误,而错误提示说未捕获的引用错误:a未定义,这暗示了aundefined呢?

什么时候可以使用逻辑赋值?只有在保证变量(a)至少被声明的情况下吗?

0