Javascript: Назначать или не назначать, в зависимости от …

#javascript

Вопрос:

В JavaScript (пожалуйста, только ванильный JS) есть ли способ «условно назначить» переменную?

Я погуглил «условно назначить» и получил ответы, связанные с тернарным оператором, назначающим то или иное в зависимости от условия, так что, возможно, я использую неправильный термин.

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

Например, выполните следующее: (^)

 const adventurer = {
  name: 'Alice',
  cat: { name: 'Dinah' }
};

const adventurer2 = {};
adventurer2.name = 'Bob';
adventurer2.cat = adventurer?.dog?.name;
console.log(adventurer2);
 

…производит:

 Object { name: "Bob", cat: undefined }
 

Но допустим, я хочу adventurer2.cat , чтобы мне ничего не назначали (даже undefined ) в приведенном выше примере-т. Е. никакого задания вообще не должно быть, если собака.имя не существует (или, в более общем случае, основано на результате некоторого условия). Так что, если бы вышеперечисленное сделало то, что я ищу, то результат был бы вместо этого:

 Object { name: "Bob" }
 

Конечно, такие вещи, как:

 If (adventurer?.dog?.name !== undefined) adventurer2.cat = adventurer.dog.name;
 

…дает результат, которого я ищу, но есть ли более короткий путь?

(Я посмотрел на логическое нулевое назначение и нулевой оператор объединения, но если я чего-то не упускаю (не так ли?), Они не могут этого сделать.)

Спасибо!

^Не имеет особого отношения к вопросу, но код заимствован и адаптирован отсюда

Комментарии:

1. Просто не звони adventurer2.cat = , или delete adventurer2.cat

Ответ №1:

В ES6 вы можете использовать встроенный if amp;amp; как более чистый способ, поэтому в принципе я бы создал функцию, которая присваивает такое значение, как это:

 function assign() {
    adventurer2.cat = adventurer.dog.name;
}
 

и возвращаясь к вашему коду, это было бы:

 const adventurer = {
  name: 'Alice',
  cat: { name: 'Dinah' }
};

const adventurer2 = {};
adventurer2.name = 'Bob';
adventurer?.dog?.name amp;amp; assign();
console.log(adventurer2);
 

Надеюсь, это то, что вы ищете.