这些表达是否相等?

时间:2015-07-31 15:27:05

标签: javascript

这是

const value = test ? value1 : value2;

等于这个?

const value = test && value1 || value2;

是否有任何不平等的情况。 (vars可能不是布尔值)

4 个答案:

答案 0 :(得分:2)

第一个表达意味着:

  

test可以评估为true时,valuevalue1,否则value为   value2

第二种意思是:

  

testvalue1两者都可以评估为true时,value   是value1,否则valuevalue2

因此,当您提供将value1进行测试的false时,它们的行为会有所不同。

因此当value1false, 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;

没有进一步的简化。

此处valuetestvalue1value2 boolean 它应该有一个 truthy / falsey 值(在评论中提到我的 @atmd )。

现在,很明显这两个非常不同