#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);
Надеюсь, это то, что вы ищете.