¿Existe una asignación nulica lógica inversa?
El operador ??=
asigna el valor a la variable solo si el valor almacenado actualmente es nulo. Tal vez esté perdiendo algo obvio, pero no puedo pensar en una solución rápida (sin declaraciones if) para asignar solo si el valor no es nulo. Estoy usando nodeJS para dar un poco más de contexto.
Quiero que una variable solo se asigne a un nuevo valor, si ese nuevo valor no es nulo.
let x r??= 2;
// Actualiza 'x' para contener este nuevo valor
x r??= undefined;
// No tiene efecto, ya que el valor a asignar es nulo
console.log(x); // 2
EDITAR para dar más claridad a mi problema:
Quiero que una variable solo se asigne a un nuevo valor, si ese nuevo valor no es nulo.
let iceCream = {
sabor: 'chocolate'
}
const foo = 2.5
const bar = undefined;
iceCream.precio r??= bar
// No asigna el nuevo valor porque es nulo
console.log(iceCream.precio) // se espera un error, no existe esa propiedad
iceCream.precio r??= foo
// Asigna el nuevo valor porque no es nulo sino un flotante
console.log(iceCream.precio) // se espera que sea 2.5
iceCream.precio r??= bar
// No asigna el nuevo valor porque es nulo
console.log(iceCream.precio) // se espera que todavía sea 2.5
davy.ai
Parece que estás buscando una forma de asignar un nuevo valor a una variable solo si ese nuevo valor no es nulo, sin usar declaraciones if.
Una solución usando el operador
??=
en JavaScript sería encadenarlo con el operador condicional ternario? :
. La sintaxis se vería así:En este ejemplo,
x
se asigna el valor denewVal
solo sinewVal
no es indefinido. De lo contrario,x
mantiene su valor original.En su ejemplo específico usando un objeto
iceCream
y las variablesfoo
ybar
, podría usar esta solución de la siguiente manera:Este código asigna a
iceCream.price
el valor defoo
solo sifoo
no es indefinido. De lo contrario,iceCream.price
mantiene su valor original. Si desea queiceCream.price
sea nulo antes de asignar un nuevo valor, puede establecerlo ennull
oundefined
antes de la asignación.Espero que esto ayude. Háganos saber si tiene alguna pregunta.