Вопрос по javascript – Заменить значение, если ноль или не определено в JavaScript

93

У меня есть требование применить?? 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]). Есть ли способ обойти это? (Я заранее не знаю имен свойств фильтров и не хочу их перебирать).

Ваш Ответ

2   ответа
6

t use the 'indexer' notation to objects (my_object[0]). Is there a way to bypass it?

Нет; объектный литерал, как следует из названия, являетсяobject, а не массив, поэтому вы не можете просто получить свойство на основе индекса, поскольку нет определенного порядка их свойств. Единственный способ получить их значения - использовать определенное имя:

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
}
Омгfor inError: User Rate Limit Exceeded
214

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 ''

Это может быть доступно по индексу.

Есть ли эквивалент в Groovy?
Если что-то фальши, это потенциально допустимый вход (0, false, пустая строка), я бы сделал что-то вроде этого:var j = (i === null) ? 10 : i; Который только заменитnull, а не все, что может быть оценено как ложное.
классный код
еслиi не определено, это вызовет ошибку. кажется мне бесполезным таким образом .. (?)
Обратите внимание, что это не работает, если 0 является допустимым значением i.

Похожие вопросы