javascript сокращенный оператор if, без части else



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



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



Это отлично работает, но что, если позже я захочу использовать только стенографию if, без части else. Например:



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



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

590   6  

6 ответов:

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

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

На мой взгляд if(conditon) expression читается лучше, чем condition && expression

Не думайте о нем как о блоке управления (то есть: если-еще или переключатель). На самом деле он не предназначен для запуска кода внутри него.

Вы можете. Он просто становится очень уродливым, очень быстрым, что разрушает цель.

То, для чего вы действительно хотите его использовать, это присвоение значений.

Взяв свой первоначальный пример и немного перевернув его с ног на голову, вы получите:

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

См. Теперь я сделал то, что я взял что-то, что потребовало бы if / else или a переключатель, который был бы использован для присвоения этому одному значению, и я очистил его красиво и красиво.

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

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

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

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

...это, как правило, работает.

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

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

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

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

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

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

Условный оператор

Не являетсясокращением для оператора if. Это оператор, а не утверждение.

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

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

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

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

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

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

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

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

Comments

    Ничего не найдено.