Прежде всего, троичное выражение не является заменой для конструкции if / else - это эквивалент конструкции if / else, которая возвращает значение. То есть предложение if / else является кодом, троичное выражение является выражением , означающим, что оно возвращает значение.
Это означает несколько вещей:
- используйте троичные выражения только тогда, когда у вас есть переменная слева от
=
которой должно быть присвоено возвращаемое значение
- Используйте троичные выражения только тогда, когда возвращаемое значение должно быть одним из двух значений (или используйте вложенные выражения, если это подходит)
- каждая часть выражения (после? и после:) должна возвращать значение без побочных эффектов (выражение
x = true
возвращает истину, так как все выражения возвращают последнее значение, но также меняет x без того, чтобы x оказывал какое-либо влияние на возвращаемое значение)
Короче говоря, «правильное» использование троичного выражения
var resultofexpression = conditionasboolean ? truepart: falsepart;
Вместо вашего примера condition ? x=true : null ;
, где вы используете троичное выражение для установки значения x
, вы можете использовать это:
condition && (x = true);
Это все еще выражение и, следовательно, может не пройти валидацию, поэтому еще лучший подход будет
void(condition && x = true);
Последний пройдет проверку.
Но опять же, если ожидаемое значение является логическим, просто используйте результат самого выражения условия
var x = (condition); // var x = (foo == "bar");
ОБНОВЛЕНИЕ
В отношении вашего образца это, вероятно, более уместно:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
condition ? x = true : null;
должно быть записано какx = (condition ? true : null);
. Кроме того, в javascriptnull
оценивается как false, так что в этом случае вы могли быx = (condition);
и достичь того же результата.