三元运算符在所有情况下都需要一个else块吗?

时间:2013-05-04 02:36:56

标签: javascript if-statement ternary-operator control-flow

假设我有这样的代码:

i=1;
if(i===1)
{
    i++;
}

此代码确实有if块,但没有else块。 所以,我的问题是,如何用三元运算符完成同样的事情。 我尝试过这样的事情:

i=1;
i===1? i++

但得到了一个错误:

SyntaxError: Unexpected end of input.

更新

所以,现在我改变了我的问题并要求三元运算符在所有情况下都需要一个else块吗?

2 个答案:

答案 0 :(得分:3)

i = i===1 ? i+1 : i;

i += i===1 ? 1 : 0;

但是你可能想要使用if。三元不太清楚。

是的,这意味着三元总是需要别的。如果有助于澄清,三元的定义“由3部分组成”。

答案 1 :(得分:2)

实际上,你可以做一个那种没有其他的三元组。

从技术上讲,它不是三元组,但它的用途相同,并且具有类似的简化格式。

这是一个名为 Short Circuiting 的技巧。

    i===1 && i++;

请参阅,该代码被视为由AND连接的一对“if”测试。当你进行一系列AND条件测试时,当它们中的任何一个失败时(从左到右解析),其余部分都会被忽略。

因此,您可以在测试后进行任何分配或操作,只有在测试成功时才会发生。

    refrigerator && beer();

...如果有冰箱,只会运行啤酒。

    refrigerator && beer() && drunk = "Woah Nelly";

...如果冰箱是真的,只会运行啤酒,并且只有当啤酒返回真正喝醉时才会被设置为“Woah Nelly”。

如果它变得复杂,你可以这样格式化:

    refrigerator 
        && beer() 
        && drunk == "Woah Nelly"
        && toilet = barf();

在你的情况下,只有当i等于严格类型1时,它才会增加++;