比较两个JavaScript语句 - 它们是否相同?

时间:2014-06-26 15:19:48

标签: javascript

这两个陈述是否相同?

var var1 = var2 ? var2 : 0;

var var1 = var2 || 0;

似乎是的,但我不确定。

var2(可能)定义如上。

3 个答案:

答案 0 :(得分:5)

不,他们不是:

> var i=0;
> with({ get var2() { return ++i; } }) {
>    var var1 = var2 || 0;
> }
> var1
1
> var i=0;
> with({ get var2() { return ++i; } }) {
>     var var1 = var2 ? var2 : 0;
> }
> var1
2

如您所见,第二个评估var2两次。然而,这是唯一的区别,而且对于“正常”变量几乎不重要。

答案 1 :(得分:4)

是的,它们是等价的。当且仅当var2是真值时(即不为零,NaN,false,null或空字符串),两个语句都评估为var2

请注意,这假设评估var2没有副作用,这适用于绝大多数情况。

答案 2 :(得分:2)

在这种情况下,它们是相同的,因为它们都测试var2真实性

显然,虽然三元变体对它有更多的味道,但是你想要测试变量以获得除了值是否为真之外的其他东西。