这两个陈述是否相同?
var var1 = var2 ? var2 : 0;
var var1 = var2 || 0;
似乎是的,但我不确定。
var2(可能)定义如上。
答案 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
的真实性。
显然,虽然三元变体对它有更多的味道,但是你想要测试变量以获得除了值是否为真之外的其他东西。