Tenho um requisito para aplicar o ??
operador C # ao JavaScript e não sei como. Considere isso em C #:
int i?=null;
int j=i ?? 10;//j is now 10
Agora eu tenho isso configurado em 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
Como faço isso corretamente?
Obrigado.
Edição: Encontrei metade do problema: não posso usar a notação 'indexador' para objetos ( my_object[0]
). Existe uma maneira de contorná-lo? (Não conheço os nomes das propriedades dos filtros de antemão e não quero iterá-los).
javascript
Valentin Vasilyev
fonte
fonte
0
,false
, string vazia), eu faria algo parecido com isso em vez disso:var j = (i === null) ? 10 : i;
Que só irá substituirnull
, em vez de qualquer coisa que pode ser avaliada como falsa.i
for indefinido, isso gerará um erro. parece inútil para mim assim .. (?)var j = (i != null ? i : 10);
deve funcionar, porqueundefined
é==
nulo, assimi != null
comofalse
para ambosnull
eundefined
.Não; um objeto literal, como o nome indica, é um objeto , e não uma matriz, portanto, você não pode simplesmente recuperar uma propriedade com base em um índice, pois não há uma ordem específica de suas propriedades. A única maneira de recuperar seus valores é usando o nome específico:
Ou iterando sobre eles usando o
for ... in
loop:fonte
for in
loop JS engraçado funciona apenas em literais de objetos! Ele falha miseravelmente em matrizes JS (fornece índice) e JS Maps (dáundefined
). Espero que você não esqueça disso, para que não tenha uma surpresa de depuração! xPES2020 Resposta
O novo Nullish Coalescing Operator está finalmente disponível no JavaScript, embora o suporte ao navegador seja limitado. De acordo com os dados da caniuse , apenas 48,34% dos navegadores são suportados (a partir de abril de 2020).
De acordo com a documentação,
Isso garantirá que ambas as suas variáveis tenham um valor de fallback de
''
iffilters[0]
oufilters[1]
arenull
, ouundefined
.Observe que o operador coalescente nulo não retorna o valor padrão para outros tipos de valor falso, como
0
e''
. Se você deseja contabilizar todos os valores falsos, deve estar usando o operador OR||
.fonte
Designação nula lógica, solução 2020+
Um novo operador está sendo adicionado aos navegadores
??=
,. Isso é equivalente avalue = value ?? defaultValue
.||=
e&&=
também estão chegando, links abaixo.Isso verifica se o lado esquerdo está indefinido ou nulo, em curto-circuito, se já definido. Caso contrário, o lado esquerdo recebe o valor do lado direito.
Exemplos básicos
Exemplos de objeto / matriz
Exemplo funcional
?? = Suporte do navegador julho de 2020 - 0,03%
?? = Documentação Mozilla
|| = Documentação Mozilla
&& = Documentação Mozilla
fonte
Solução de desestruturação
O conteúdo da pergunta pode ter sido alterado, então tentarei responder completamente.
A reestruturação permite extrair valores de qualquer coisa com propriedades. Você também pode definir valores padrão quando nulos / indefinidos e aliases de nome.
Se estiver trabalhando com uma matriz, eis como você faz isso.
Nesse caso, o nome é extraído de cada objeto na matriz e recebe seu próprio alias. Como o objeto pode não existir,
= {}
também foi adicionado.Tutorial mais detalhado
Suporte do navegador 92% julho de 2020
fonte