Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как добиться троичного присваивания в Javascript?

Автор вопроса: Charles KornoeljeОтветов: 2

Я хотел бы переназначить переменную класса в Javascript (или Typescript) с помощью тернарного оператора. Переназначение this.foo зависит от текущего значения this.foo, которое я могу обновить следующим образом:

setFoo = () => {
    this.foo = this.foo ? "" : "foo";
}

Однако мне интересно, могу ли я переназначить this.foo, не написав this.foo дважды. Это было бы полезно, потому что я пытаюсь динамически обновлять классы компонента Angular (написанного на Typescript).

Я хотел бы иметь возможность написать что-то вроде следующего, в котором используются истинные/ложные значения. Если this.foo соответствует действительности, то присваивается ""; в противном случае присваивается "foo":

setFoo = () => {
    this.foo =? "" : "foo";
}

Пробовал искать похожие вопросы, но ответа не нашел. Моей первоначальной мыслью было использовать оператор ??= в Typescript 4.0, но я не думаю, что это сработает. Возможно, моего идеального решения не существует, потому что это может быть плохой привычкой программирования. Спасибо

  • вы должны уточнить, что вы пытаетесь сделать. вы написали, что this.foo является ложным, но код, который вы написали, делает обратное. Rick 28.10.2020
  • @ Рик, я пытаюсь определить, правдив ли this.foo, если this.foo. Это опечатка изначально. Спасибо, что поймали это. Я отредактировал свой вопрос. Charles Kornoelje 28.10.2020
  • Возможны только this.foo = this.foo || "" и this.foo = this.foo && "". Это не совсем соответствует вашим потребностям, но все же короче. Iyashi 28.10.2020
  • тернарный - самый короткий для двух разных значений. Nina Scholz 28.10.2020
  • Почему? Ternary сам по себе достаточно ужасен, хотя сейчас я чаще использую его с const. Не минимизируйте свой код разработки, позвольте минификатору сделать это, когда вы выпускаете код в производство. Teemu 28.10.2020
  • то, как вы написали, работает и достаточно лаконично. Не вижу причин его сокращать. Rick 28.10.2020

typescriptjavascriptconditional-operatorassignment-operatorvariable-assignment

Ответы

Ответ 1 · рейтинг 1 · jburtondev

Отличный вопрос. К сожалению, это невозможно. Существует сокращенная версия, которую используют некоторые люди, но она по-прежнему содержит дублирование:

foo = foo || otherCondition;

Так что стенография стенографии, на мой взгляд, не слишком полезная.

Короткий ответ: я бы выбрал обычный тернар.

Ответ 2 · Rizwan

Вы должны использовать IF ELSE вместо использования тернарного оператора, если else даст вам больше контроля над оператором, написанным под ним, и эффективным для использования.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы