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

hug*_*omg 32 javascript jshint

我真的喜欢调整?以及我的三元运算符,当它们不适合一条线时,如下所示:

var myVar = (condition
    ? ifTrue
    : ifFalse
);
Run Code Online (Sandbox Code Playgroud)

然而,JSHint抱怨:

在"?"之前坏线断线

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

Mrc*_*ief 24

更新:这个答案现在已经过时了.显然,克罗克福德改变了主意;)

请参阅@ CheapSteaks的更新答案.

Per Crockford:

在操作符之后放置中断,最好在逗号之后.在运算符之后的中断减少了分号插入掩盖复制粘贴错误的可能性.

所以:

// this is ok
var myVar = (condition ?
    ifTrue : 
    ifFalse
);
Run Code Online (Sandbox Code Playgroud)

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

// this is ok
var myVar = (1==1 ?
    true : 
    false
);
Run Code Online (Sandbox Code Playgroud)

  • 好吧,如果发生自动插入,这是有效的:`var a = condition;`而这不是:`var a = condition?;`.在前一种情况下,这可能会导致奇怪的错误,而在后来,您会立即发现它,因为所有浏览器都会抱怨无效语法. (6认同)
  • 完整的引用是"避免过长的线条.当一个陈述不能很好地适用于单行时,可能需要打破它.最好在{左括号后,[左括号,(左支柱,),逗号,或者在...之前,?问号,或者冒号.".这似乎与你的解释相反. (3认同)
  • 如果您按照包含的链接进行操作,那么断线位置的建议与您的相反.报价也从未出现过.也许Crockford的建议有所改变? (2认同)

pim*_*vdb 20

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

var a = test1
         ? b
         : test2
            ? c
            : d;
Run Code Online (Sandbox Code Playgroud)


Che*_*aks 13

Per 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;
};
Run Code Online (Sandbox Code Playgroud)


Dan*_*ite 6

您应该将运算符放在行尾。这样一来,更清楚的是该陈述继续到下一行。

  • 这是主观的。我个人认为在下一行使用“?”会更清楚。 (31认同)