在Javascript中,将三元运算符的“?”放在下一行是否可以?

时间:2011-08-31 15:05:25

标签: javascript jshint

我真的喜欢对齐吗?以及我的三元运算符,当它们不合适时,就像这样:

var myVar = (condition
    ? ifTrue
    : ifFalse
);

然而,JSHint抱怨:

  

''之前坏线断线?

为什么JSHint会收到此警告?是否有任何讨厌(如分号插入等)它会保护我免受攻击,还是可以安全地更改我的JSHINT配置以忽略它?

4 个答案:

答案 0 :(得分:24)

更新:此答案现已过时。显然,克罗克福德改变了主意;)

请参阅@ CheapSteaks的answer了解更新。

<击>

<击>

Crockford

  

将断点放在操作符后面,最好是逗号后面。休息   在运算符降低了复制粘贴错误的可能性之后   将被分号插入掩盖。

所以:

// this is ok
var myVar = (condition ?
    ifTrue : 
    ifFalse
);

如果您通过JSHint运行此示例代码,则会传递:

// this is ok
var myVar = (1==1 ?
    true : 
    false
);

<击>

答案 1 :(得分:19)

这有效并且当然有效。它在更复杂的用例中尤其有用,例如嵌套的用例。

var a = test1
         ? b
         : test2
            ? c
            : d;

答案 2 :(得分:13)

Crockford

  

三元运算符可能在视觉上混乱,所以?问号   总是开始一行并将缩进增加4个空格,并且:   冒号总是开始一条线,与?对齐?问号。该   条件应该用parens包裹。

var integer = function (
    value,
    default_value
) {
    value = resolve(value);
    return (typeof value === "number")
        ? Math.floor(value)
        : (typeof value === "string")
            ? value.charCodeAt(0)
            : default_value;
};

答案 3 :(得分:4)

您应该将操作员放在行尾。这样就可以更清楚地看到这一声明继续下一行。