Прежде всего, троичное выражение не является заменой для конструкции if / else - это эквивалент конструкции if / else, которая возвращает значение. То есть предложение if / else является кодом, троичное выражение является выражением , что означает, что оно возвращает значение.
Это означает несколько вещей:
- используйте троичные выражения только тогда, когда у вас есть переменная слева от
=
, которой должно быть присвоено возвращаемое значение
- использовать троичные выражения только в том случае, если возвращаемое значение должно быть одним из двух значений (или использовать вложенные выражения, если оно подходит)
- каждая часть выражения (после? И после:) должна возвращать значение без побочных эффектов (выражение
x = true
возвращает 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");
UPDATE
По отношению к вашему образцу это, вероятно, более уместно:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';