Заменить значение, если значение null или undefined в JavaScript
У меня есть требование применить оператор ??
С# к JavaScript, и я не знаю, как это сделать.
Рассмотрим это в С#:
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
Как мне это сделать правильно?
Спасибо.
EDIT: я обнаружил половину проблемы: я не могу использовать нотацию 'indexer' для объектов (my_object[0]
). Есть ли способ обойти его? (Я заранее не знаю имена свойств фильтров и не хочу их перебирать).
Ответы
Ответ 1
Вот эквивалент JavaScript:
var i = null;
var j = i || 10; //j is now 10
Обратите внимание, что логический оператор ||
не возвращает логическое значение, а первое значение, которое может быть преобразовано в true.
Дополнительно используйте массив объектов вместо одного объекта:
var options = {
filters: [
{
name: 'firstName',
value: 'abc'
}
]
};
var filter = options.filters[0] || ''; // is {name:'firstName', value:'abc'}
var filter2 = options.filters[1] || ''; // is ''
К этому можно обратиться по индексу.
Ответ 2
Я заметил половину проблемы: я не могу использовать нотацию 'indexer' для объектов (my_object [0]). Есть ли способ обойти его?
Нет; объектный литерал, как следует из названия, является объектом, а не массивом, поэтому вы не можете просто получить свойство на основе индекса, так как нет определенного порядка их свойств. Единственный способ получить их значения - использовать определенное имя:
var someVar = options.filters.firstName; //Returns 'abc'
Или путем итерации по ним с помощью цикла for ... in
:
for(var p in options.filters) {
var someVar = options.filters[p]; //Returns the property being iterated
}