Ответ 1
Это работает и, безусловно, действует. Это особенно полезно в более сложных случаях использования, например вложенных.
var a = test1
? b
: test2
? c
: d;
Мне очень нравится выравнивание? и: моего троичного оператора, когда они не вписываются в строку, например:
var myVar = (condition
? ifTrue
: ifFalse
);
Однако JSHint жалуется:
Неправильное нарушение строки перед '?'
Почему у JSHint есть это предупреждение? Есть ли какая-либо отвратительность (например, вставка с запятой и т.д.), Она защищает меня или я могу безопасно изменить конфигурацию JSHINT, чтобы игнорировать ее?
Это работает и, безусловно, действует. Это особенно полезно в более сложных случаях использования, например вложенных.
var a = test1
? b
: test2
? c
: d;
ОБНОВЛЕНИЕ. Этот ответ устарел. Видимо, Крокфорд меняет свое мнение;)
См. @CheapSteaks ответ для обновления.
Per Crockford:
Поместите разрыв после оператора, в идеале после запятой. Перерыв после того, как оператор уменьшает вероятность того, что ошибка копирования-вставки будут замаскированы точкой с запятой.
Итак:
// this is ok
var myVar = (condition ?
ifTrue :
ifFalse
);
Если вы запустите этот пример кода через JSHint, это будет проходить:
// this is ok
var myVar = (1==1 ?
true :
false
);
Забастовкa >
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;
};
Вы должны поместить оператора в конец строки. Таким образом, более ясно, что статут продолжался до следующей строки.