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()
调用都不会发生,因为这两个操作是短路的 - ||
当第一个值是真&&
值时不评估第二个值,而当第一个值是假值时不评估第二个值.