Подтвердить что ты не робот

В Javascript, правильно ли положить тернарный оператор `?` На следующую строку?

Мне очень нравится выравнивание? и: моего троичного оператора, когда они не вписываются в строку, например:

var myVar = (condition
    ? ifTrue
    : ifFalse
);

Однако JSHint жалуется:

Неправильное нарушение строки перед '?'

Почему у JSHint есть это предупреждение? Есть ли какая-либо отвратительность (например, вставка с запятой и т.д.), Она защищает меня или я могу безопасно изменить конфигурацию JSHINT, чтобы игнорировать ее?

4b9b3361

Ответ 1

Это работает и, безусловно, действует. Это особенно полезно в более сложных случаях использования, например вложенных.

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

Ответ 2

ОБНОВЛЕНИЕ. Этот ответ устарел. Видимо, Крокфорд меняет свое мнение;)

См. @CheapSteaks ответ для обновления.

Per Crockford:

Поместите разрыв после оператора, в идеале после запятой. Перерыв после того, как оператор уменьшает вероятность того, что ошибка копирования-вставки будут замаскированы точкой с запятой.

Итак:

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

Если вы запустите этот пример кода через JSHint, это будет проходить:

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

Забастовкa >

Ответ 3

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;
};

Ответ 4

Вы должны поместить оператора в конец строки. Таким образом, более ясно, что статут продолжался до следующей строки.