Tengo el requisito de aplicar el ??
operador C # a JavaScript y no sé cómo. Considere esto en C #:
int i?=null;
int j=i ?? 10;//j is now 10
Ahora tengo esta configuración en 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
¿Cómo lo hago correctamente?
Gracias.
EDITAR: Descubrí la mitad del problema: no puedo usar la notación 'indexador' para los objetos ( my_object[0]
). ¿Hay alguna forma de evitarlo? (No sé los nombres de las propiedades de los filtros de antemano y no quiero iterar sobre ellos).
javascript
Valentin Vasilyev
fuente
fuente
0
,false
, cadena vacía), me gustaría hacer algo como esto en su lugar:var j = (i === null) ? 10 : i;
Lo que sólo reemplazaránull
, en lugar de algo que puede ser evaluada a falso.i
no está definido, arrojará un error. me parece inútil así .. (?)var j = (i != null ? i : 10);
debería funcionar, porqueundefined
es==
nulo, también loi != null
esfalse
para ambosnull
yundefined
.No; un objeto literal, como su nombre lo indica, es un objeto y no una matriz, por lo que no puede simplemente recuperar una propiedad basada en un índice, ya que no existe un orden específico de sus propiedades. La única forma de recuperar sus valores es usando el nombre específico:
O iterando sobre ellos usando el
for ... in
ciclo:fuente
for in
bucle JS solo funciona en literales de objeto. Falla miserablemente en matrices JS (da índice) y JS Maps (daundefined
). Espero que no lo olvide, ¡no sea que se encuentre con una sorpresa de depuración! xPRespuesta ES2020
El nuevo Nullish Coalescing Operator finalmente está disponible en JavaScript, aunque el soporte del navegador es limitado. Según los datos de caniuse , solo el 48,34% de los navegadores son compatibles (a abril de 2020).
Según la documentación,
Esto asegurará que ambas variables tengan un valor de respaldo de
''
sifilters[0]
ofilters[1]
sonnull
, oundefined
.Tenga en cuenta que el operador de fusión nula no devuelve el valor predeterminado para otros tipos de valores falsos como
0
y''
. Si desea contabilizar todos los valores falsos, debe utilizar el operador OR||
.fuente
Asignación de anulación lógica, solución 2020+
Actualmente se está añadiendo un nuevo operador para los navegadores,
??=
. Esto es equivalente avalue = value ?? defaultValue
.||=
y&&=
también vienen, enlaces a continuación.Esto verifica si el lado izquierdo está indefinido o es nulo, en cortocircuito si ya está definido. De lo contrario, al lado izquierdo se le asigna el valor del lado derecho.
Ejemplos básicos
Ejemplos de objetos / matrices
Ejemplo funcional
?? = Soporte del navegador julio de 2020 - .03%
?? = Documentación de Mozilla
|| = Documentación de Mozilla
&& = Documentación de Mozilla
fuente
Solución de desestructuración
Es posible que el contenido de la pregunta haya cambiado, así que intentaré responder de manera exhaustiva.
La desestructuración le permite extraer valores de cualquier cosa con propiedades. También puede definir valores predeterminados cuando es nulo / no definido y alias de nombre.
Si trabaja con una matriz, así es como lo hace.
En este caso, el nombre se extrae de cada objeto de la matriz y se le asigna su propio alias. Dado que el objeto podría no existir
= {}
, también se agregó.Tutorial más detallado
Compatibilidad con navegadores 92% julio de 2020
fuente