在Javascript中,可以将三元运算符';s`?`在下一行吗?

在Javascript中,可以将三元运算符';s`?`在下一行吗?,javascript,jshint,Javascript,Jshint,我真的很喜欢这个?三元运算符的:当它们不适合一条直线时,如下所示: var myVar = (condition ? ifTrue : ifFalse ); 但是,投诉人: “?”之前的坏线路断开 为什么JSHint会有这样的警告?是否有任何不好的地方(如分号插入等)可以保护我,或者我可以安全地更改JSHINT配置以忽略它吗?您应该将运算符放在行的末尾。这样,更清楚的是,该声明将继续到下一行。这是有效的,而且肯定是有效的。它在更复杂的用例中特别有用,比如嵌套用例 var a =

我真的很喜欢这个?三元运算符的:当它们不适合一条直线时,如下所示:

var myVar = (condition
    ? ifTrue
    : ifFalse
);
但是,投诉人:

“?”之前的坏线路断开


为什么JSHint会有这样的警告?是否有任何不好的地方(如分号插入等)可以保护我,或者我可以安全地更改JSHINT配置以忽略它吗?

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

这是有效的,而且肯定是有效的。它在更复杂的用例中特别有用,比如嵌套用例

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

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

有关更新,请参见@CheapSteaks's

Per:

将分隔符放在运算符后面,最好放在逗号后面。休息 操作员降低复制粘贴错误的可能性后 将被分号插入遮罩

因此:

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

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

三元运算符在视觉上很容易混淆,所以呢?问号 始终从一行开始,并将缩进增加4个空格,并且: 冒号总是以一行开头,与?问号。这个 条件应该用帕伦包装


你能举一个例子说明在这种特殊情况下分号插入会对我产生什么影响吗?我已经知道什么满足JSHint(我只是不喜欢它…)好吧,如果发生自动插入,这是有效的:
var a=condition而这不是:
var a=条件。在前一种情况下,这可能会导致奇怪的错误,而在后一种情况下,你会立即发现它,因为所有浏览器都会抱怨语法无效。完整的引号是“避免过长的行。当一条语句不能很好地放在一行上时,可能需要打断它。最好在{左括号,[左括号,],(左括号、逗号或句点、问号或:冒号之前。)。这似乎与您的解释相反。如果您遵循所包含的链接,那么关于在何处断线的建议与您的建议相反。此外,引用从未出现过。也许Crockford的建议发生了变化?对人类来说,最美好的东西显然是OP在其原始示例中提供的。然而,问题是它可以可能会造成可怕的分号插入。为了避免这种情况,尽我所能,@Mrchief的回答提供了最好的折衷办法:不插入半分号,并且相对清晰易读。这是主观的。我个人觉得下一行的
更清楚。@missingno-这就是jshint想要告诉你的。我知道这一点works。我只是想确定警告消息背后没有恶意的Javascript污点。@missingno:我不知道,它甚至可以与
return
一起使用,这有时会忽略其他行。如果嵌套三元表达式,这确实有助于可读性,但我建议在可能的情况下,对嵌套值进行变量化d在三元表达式中使用对这些变量的引用,这进一步提高了可读性。现在,我向那些对分号感兴趣的人推荐这篇文章:。到处使用分号是惯用的标准,但省略分号并不像有些人说的那样危险。
// this is ok
var myVar = (1==1 ?
    true : 
    false
);
var integer = function (
    value,
    default_value
) {
    value = resolve(value);
    return (typeof value === "number")
        ? Math.floor(value)
        : (typeof value === "string")
            ? value.charCodeAt(0)
            : default_value;
};