У меня есть требование применить ??
оператор C # к JavaScript, и я не знаю, как это сделать. Рассмотрим это на C #:
int i?=null;
int j=i ?? 10;//j is now 10
Теперь у меня это настроено в JavaScript:
var options={
filters:{
firstName:'abc'
}
};
var filter=options.filters[0]||'';//should get 'abc' here, it doesn't happen
var filter2=options.filters[1]||'';//should get empty string here, because there is only one filter
Как мне это сделать правильно?
Спасибо.
РЕДАКТИРОВАТЬ: Я заметил половину проблемы: я не могу использовать нотацию «индексатор» для объектов ( my_object[0]
). Есть ли способ обойти это? (Я не знаю заранее названия свойств фильтров и не хочу их перебирать).
javascript
Валентин Васильев
источник
источник
0
,false
, пустая строка), я хотел бы сделать что - то вроде этого , вместо:var j = (i === null) ? 10 : i;
Который будет только заменитьnull
, а не что - либо , что может быть признано неверным.i
не определено, это вызовет ошибку. мне кажется бесполезным таким образом .. (?)var j = (i != null ? i : 10);
должен работать, потому что онundefined
равен==
нулю, такi != null
жеfalse
какnull
и для иundefined
.Нет; литерал объекта, как следует из названия, является объектом , а не массивом, поэтому вы не можете просто получить свойство на основе индекса, поскольку не существует определенного порядка их свойств. Единственный способ получить их значения - использовать конкретное имя:
Или перебирая их с помощью
for ... in
цикла:источник
for in
цикл JS работает только с литералами объектов! Он терпит неудачу с массивами JS (дает индекс) и JS Maps (даетundefined
). Надеюсь, вы не забудете это, иначе вас ждет сюрприз отладки! xPES2020 Ответ
Новый Nullish Coalescing Operator наконец-то доступен на JavaScript, хотя поддержка браузером ограничена. По данным caniuse , поддерживается только 48,34% браузеров (по состоянию на апрель 2020 г.).
Согласно документации,
Это гарантирует, что обе ваши переменные будут иметь резервное значение
''
iffilters[0]
илиfilters[1]
arenull
, илиundefined
.Обратите внимание, что оператор объединения с нулевым значением не возвращает значение по умолчанию для других типов ложных значений, таких как
0
и''
. Если вы хотите учесть все ложные значения, вам следует использовать оператор OR||
.источник
Логическое нулевое назначение, решение 2020+
В браузеры в настоящее время добавляется новый оператор
??=
. Это эквивалентноvalue = value ?? defaultValue
.||=
и&&=
тоже идут, ссылки ниже.Это проверяет, является ли левая сторона неопределенной или нулевой, короткое замыкание, если она уже определена. В противном случае левой стороне присваивается значение правой части.
Основные примеры
Примеры объектов / массивов
Функциональный пример
?? = Поддержка браузеров июль 2020 г. - 0,03%
?? = Документация Mozilla
|| = Документация Mozilla
&& = Документация Mozilla
источник
Разрушающее решение
Возможно, содержание вопроса изменилось, поэтому я постараюсь ответить подробно.
Деструктуризация позволяет извлекать значения из всего, что имеет свойства. Вы также можете определить значения по умолчанию, когда null / undefined и псевдонимы имен.
Вот как вы это делаете, если работаете с массивом.
В этом случае имя извлекается из каждого объекта в массиве и получает собственный псевдоним. Так как объект мог не существовать,
= {}
также был добавлен.Более подробное руководство
Поддержка браузеров 92% Июль 2020 г.
источник