Мне всегда приходилось ставить null
условия, в которых ничего нет. Есть ли что-нибудь вокруг этого? Например
condition ? x = true : null;
в принципе, есть ли способ сделать:
condition ? x = true;
Теперь это проявляется как синтаксическая ошибка
К вашему сведению, вот пример кода:
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;
javascript
optimization
syntax-error
Оскар Годсон
источник
источник
condition ? x = true : null;
должно быть записано какx = (condition ? true : null);
. Кроме того, в javascriptnull
оценивается как false, так что в этом случае вы могли быx = (condition);
и достичь того же результата.if (!defaults.slideshowWidth) defaults.slideshowWidth = obj.find('img').width()+'px'
Ответы:
Прежде всего, троичное выражение не является заменой для конструкции if / else - это эквивалент конструкции if / else, которая возвращает значение. То есть предложение if / else является кодом, троичное выражение является выражением , означающим, что оно возвращает значение.
Это означает несколько вещей:
=
которой должно быть присвоено возвращаемое значениеx = true
возвращает истину, так как все выражения возвращают последнее значение, но также меняет x без того, чтобы x оказывал какое-либо влияние на возвращаемое значение)Короче говоря, «правильное» использование троичного выражения
Вместо вашего примера
condition ? x=true : null ;
, где вы используете троичное выражение для установки значенияx
, вы можете использовать это:Это все еще выражение и, следовательно, может не пройти валидацию, поэтому еще лучший подход будет
Последний пройдет проверку.
Но опять же, если ожидаемое значение является логическим, просто используйте результат самого выражения условия
ОБНОВЛЕНИЕ В отношении вашего образца это, вероятно, более уместно:
источник
i/else
опечатку, так как недостаточно символов.void()
. Спасибо.Нет, для этого нужны три операнда. Вот почему их называют троичными операторами.
Однако, для примера, вы можете сделать это:
Хотя безопаснее иметь фигурные скобки, если вам нужно добавить более одного утверждения в будущем:
Изменить: Теперь, когда вы упоминаете фактический код, в котором ваш вопрос относится к:
источник
Чаще люди используют логические операторы для сокращения синтаксиса операторов:
Но в вашем конкретном случае синтаксис может быть еще проще
Этот код вернет
defaults.slideshowWidth
значение, если значениеdefaults.slideshowWidth
равно true иobj.find('img').width()+'px'
значение иначе.См. Короткое замыкание Оценка логических операторов для деталей.
источник
источник
(defaults.slideshowWidth) || (defaults.slideshowWidth = obj.find('img').width()+'px')
илиdefaults.slideshowWidth = defaults.slideshowWidth || (obj.find('img').width()+'px')
Вы могли бы написать
Так что х не изменяется, когда условие ложно.
Это эквивалентно
РЕДАКТИРОВАТЬ:
Есть несколько альтернатив - я не говорю, что они лучше / хуже - просто альтернативы
Передача нулевого значения в качестве третьего параметра работает, поскольку существующее значение равно нулю. Если вы выполните рефакторинг и измените условие, то есть опасность, что это больше не так. Передача существующего значения в качестве 2-го выбора в тройной страже против этого:
Безопаснее, но, возможно, не так приятно смотреть, и больше печатать. На практике я бы наверное написал
источник
В вашем случае я вижу троичный оператор как избыточный. Вы можете присвоить переменную непосредственно выражению, используя операторы ||, &&.
станет :
Это более понятно, это больше стиль "javascript".
источник
Насчет просто
источник
Для использования тернарного оператора без указания внутри массива или объявления объекта вы можете использовать оператор распространения ES6
...()
И для объектов:
первоисточник
источник