这是
const value = test ? value1 : value2;
等于这个?
const value = test && value1 || value2;
是否有任何不平等的情况。 (vars可能不是布尔值)
答案 0 :(得分:2)
第一个表达意味着:
当
test
可以评估为true
时,value
为value1
,否则value
为value2
。
第二种意思是:
当
test
和value1
两者都可以评估为true
时,value
是value1
,否则value
是value2
。
因此,当您提供将value1
进行测试的false
时,它们的行为会有所不同。
因此当value1
为false, null, undefined, null, 0, NaN, ''(empty string)
时,无论test
是什么,值都为value2
。
您可以看到Truth, Equality and JavaScript在什么条件下将值测试到false
。
答案 1 :(得分:2)
他们并不平等。在第一种情况下,仅根据测试值为value赋值value1或value2。在第二种情况下,如果value1为falsy,则将始终为value赋值。
答案 2 :(得分:2)
const value = test ? value1 : value2;
当测试评估为true时,这基本上是value = value1
,当测试评估为false时,这基本上是value = value2
;
const value = test && value1 || value2;
首先检查test
是否为真,然后检查value1
是否为真。因此,如果value1
是" falsy"即使value
评估为真,value2
值也会等于test
。
答案 3 :(得分:0)
const value = test ? value1 : value2;
可以转换为
const value;
if(test) {
value = value1;
} else {
value = value2
}
和强>
const value = test && value1 || value2;
没有进一步的简化。
此处value
,test
,value1
,value2
已为boolean
或它应该有一个 truthy / falsey 值(在评论中提到我的 @atmd )。
现在,很明显这两个非常不同