Подтвердить что ты не робот

Инструкция javascript shortorth if, без остальной части

Итак, я использую сокращенный javascript if/else (я читал где-то, что они называются терминами Ternary?)

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

Это отлично работает, но что, если позже я хочу использовать только сокращенное if, без части else. Как:

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

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

4b9b3361

Ответ 1

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

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

на мой взгляд if(conditon) expression более читаем, чем condition && expression

Ответ 2

Не думайте об этом как о контрольном блоке (например: 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 или ветвления, немедленно вызывающая (и не-JS-программисты, или неподготовленные программисты JS собираются пытаться сохранить ваш код).

Ответ 3

Нет, это невозможно, потому что тернарный оператор требует, три операнда с ним.

first-operand ? second-operand (if first evaluates to true) : third-operand (if false)

Ответ 4

То, что у вас есть, не будет работать, но почему бы просто не использовать только одну строку if.

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

Это связано с меньшей типизацией, чем метод, предложенный Рей. Конечно, его ответ действительно, если вы действительно хотите придерживаться этого формата.

Ответ 5

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

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

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

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

Ответ 6

Это не отвечает на ваш вопрос, но троицы позволяют писать меньше, чем вы показали:

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

И теперь, когда я думаю об этом, да, вы тоже можете задать свой вопрос:

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

Это теория. В следующий раз, когда у меня появится возможность += трояна, я попробую это. Дайте мне знать, как это работает!

Ответ 7

У меня был аналогичный случай, когда я хотел только называть часть if. Достигнуто путем использования логического && (и).

var name = "michael";

var doSomething = function() {
  return (name === "michael") && console.log("name is valid");
};

doSomething(); // will log name is valid else returns undefined but is disposed of since we never store it.