0

Сокращённый оператор if в JavaScript без части else

10

Я использую сокращённую запись условного оператора JavaScript (я где-то слышал, что их называют тернарными операторами). В моём коде это выглядит так:

this.dragHandle.hasClass('handle-low') ? direction = "left" : direction = "right"

Это прекрасно работает, но что, если позже мне нужно использовать только сокращённый if, без части else? Например:

direction == "right" ? slideOffset += $(".range-slide").width()

Это вообще возможно?

5 ответ(ов)

1

Вы можете использовать оператор &&, чтобы второй операнд выполнялся только в случае, если первый истинный. Например:

direction == "right" && (slideOffset += $(".range-slide").width());

Однако, на мой взгляд, конструкция if (condition) expression более читаемая, чем condition && expression. Это связано с тем, что использование if явно показывает намерение и делает код легче воспринимаемым, особенно для тех, кто не знаком с логическими операторами в JavaScript.

0

Не думайте об этом как о блоке управления (например, как о if-else или switch). Это не совсем предназначено для выполнения кода внутри него.

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

На самом деле, что вы хотите использовать для этого — это ПРИСВАИВАНИЕ ЗНАЧЕНИЙ.

Превращая ваш первоначальный пример в нечто другое, мы можем получить:

direction = (this.dragHandle.hasClass("handle-low")) ? "left" : "right";

Видите? Я взял то, что потребовало бы if/else или switch, которые использовались бы для присвоения этого одного значения, и упростил это в аккуратную и понятную строку.

Вы даже можете сделать что-то типа else-if с тернарным оператором:

y = (x === 2) ? 1 : (x === 3) ? 2 : (x === 4) ? 7 : 1000;

Вы также можете использовать его для выполнения кода, если хотите, но вскоре станет очень сложно разобраться, что куда идет (посмотрите на предыдущий пример, чтобы увидеть, как даже присваивание может выглядеть странно на первый взгляд)...

((this.dragHandle.hasClass("...")) ? fireMe(something) : noMe(somethingElse));

...это обычно будет работать.

Но это не будет значительно красивее или полезнее, чем if или ветвящийся немедленно вызывающийся функционал (и не обладающие опытом программисты на JavaScript, или новички, будут испытывать трудности с поддержкой вашего кода).

0

Ваше решение не сработает, но почему бы не использовать оператор if в одной строке вместо этого?

if (direction == "right") slideOffset += $(".range-slide").width();

Это потребует меньше кода по сравнению с методом, который предложил Рей. Разумеется, его ответ имеет право на существование, если вы хотите придерживаться именно такого формата.

0

Условный оператор не является сокращенной формой для оператора if. Это оператор, а не операторный блок.

Если вы его используете, следует использовать его именно как оператор, а не как операторный блок.

Просто используйте нулевое значение для третьего операнда:

slideOffset += direction == "right" ? $(".range-slide").width() : 0;
0

Вы можете использовать оператор && для выполнения условия и изменения значения. Например, в вашем случае это можно записать так:

direction == "right" && (slideOffset += $(".range-slide").width());

Таким образом, если direction равно "right", то к slideOffset будет добавлено значение ширины элемента с классом range-slide. Не забудьте заключить выражение в скобки, чтобы избежать ошибок при выполнении.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь