是";x==a | b";及;x==a | x==b“;JavaScript中的等价语句?

是";x==a | b";及;x==a | x==b“;JavaScript中的等价语句?,javascript,if-statement,Javascript,If Statement,这些陈述如何等价 var测试='one' if( test == 'car' || 'one' ){ console.log('spo') } 及 不,第一次考试总是通过的 如果|的左侧错误,它将返回右侧。因此,将返回右侧('one')。这是真实的,因此测试将通过。不,它们不是等效的 if( test == 'car' || 'one' ){ console.log('spo') } 相当于 if( test == 'car' || 'one' != ''){ console.l

这些陈述如何等价

var测试='one'

if( test == 'car' || 'one' ){
console.log('spo')
}


不,第一次考试总是通过的


如果
|
的左侧错误,它将返回右侧。因此,将返回右侧(
'one'
)。这是真实的,因此测试将通过。

不,它们不是等效的

if( test == 'car' || 'one' ){
    console.log('spo')
}
相当于

if( test == 'car' || 'one' != ''){
  console.log('spo')
}

不,像Javascript这样的语言,接受“一”为真。所以第一次测试总是通过的。 第二个测试可能是错误的,因为我们不知道测试可能是什么。

不,它们不是

在第一个条件中,
test==“car”| |“one”
(test==“car”)| |“one”
相同,后者总是计算为a(即相等或“one”的结果)

后一个条件仅在测试为“car”或“one”时产生true,而在所有其他情况下产生false


也可以尝试使用失败的测试值,比如反例中的“hello”。

不,它们不是等价的,如果您正在测试该变量的内容,您会希望使用后者。对于引起如此多讨论和困惑的问题,这似乎是一个公平的问题。我认为javascript一点也不疯狂,它是在做任何其他编程语言对表达式/布尔值的结果所做的事情,这取决于程序员如何小心地处理控制流。你可以给它任何东西,而且它几乎总是运行。像C’s’s这样的“理智”语言永远不会编译:P希望它能清除它。你不能把C和JavaScript比较,如果你在C++和C中使用IF条件,结果是相似的。TouChe,我将移除“疯狂”。如果它让你高兴:)一个更准确的等价物是
test='car'| | Boolean('one')
,因为
|
对ToBoolean评估感兴趣。不是强制相等计算。@graystateiscoming否,刚刚返回第二个操作数。因此,如果
test
不是
'car'
,将返回
'one'
,而不是
true
@graystateiscong,但这会在混合中加入额外的内容。我说它与
(text=='car')| |'one'
相同:它的计算结果仍然是一个将由条件语句使用的值。然后是说哪些值分别为“真”的问题。@lonesomeday:我只是说关于真/假计算,它不是强制相等计算,而是布尔计算。但因为它是最后一个操作数,所以它确实跳过了计算,这是正确的。当它不是最后一个操作数时,它得到值,做一个toBooLoin,然后如果真的结果成立,返回值。实际上,因为我们在<代码> IF-(<)>代码>条件下,<代码> IF-(<)>代码>确实考虑它被赋予的任何一个toBooLoin,因此最终返回的任何值都将得到toBooLeon处理。
if( test == 'car' || 'one' != ''){
  console.log('spo')
}