JavaScript将变量中的&&语句组合为true或false

Ano*_*ous 4 javascript variables

只是一个简单的问题.我找不到与此相关的任何内容,因为我真的没有看到如何解释它...但是,如果我使用&&组合两个bool值来制作另一个变量,会发生什么?

var is_enabled = isEnabled() && isSupported();
Run Code Online (Sandbox Code Playgroud)

如果isEnabled()为false且isSupported()为true,它是否等于false?

rob*_*rit 23

在Javascript中&&,||运算符略显奇怪.这取决于是否值是"falsy"(零undefined,null空字符串NaN)或truthy(别的,包括空数组).

&&如果第一个值是"falsy",则操作的结果将是第一个值,否则这将是第二个值.与||如果第一个值是"falsy",则操作的结果将是第二值,否则这将是第一个值.

例:

var a = 5 && 3; // a will be 3
var a = 0 && 7; // a will be 0

var a = 1 || 2; // a will be 1
var a = 0 || 2; // a will be 2
Run Code Online (Sandbox Code Playgroud)

如果你想要替换它,这非常有用:

if (x == null){
  x = 5;
}
Run Code Online (Sandbox Code Playgroud)

附:

x = x || 5;
Run Code Online (Sandbox Code Playgroud)

所以简而言之,如果isEnabled()是真的那么is_enabled将被设置为任何isSupported()回报.如果isEnabled()是假的,那么is_enabled将被设置为任何虚假值.

罗伯特指出,还有短路:

var x = 5 || infinite_loop();
var x = false && infinite_loop();
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,infinite_loop()调用都不会发生,因为这两个操作是短路的 - ||当第一个值是真&&值时不评估第二个值,而当第一个值是假值时不评估第二个值.