es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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
Tags:  , , ,

Answer

  1. Avatar for 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í:

    let x = null;
    x ??= (newVal !== undefined) ? newVal : x;
    

    En este ejemplo, x se asigna el valor de newVal solo si newVal no es indefinido. De lo contrario, x mantiene su valor original.

    En su ejemplo específico usando un objeto iceCream y las variables foo y bar, podría usar esta solución de la siguiente manera:

    iceCream.price ??= (foo !== undefined) ? foo : iceCream.price;
    

    Este código asigna a iceCream.price el valor de foo solo si foo no es indefinido. De lo contrario, iceCream.price mantiene su valor original. Si desea que iceCream.price sea nulo antes de asignar un nuevo valor, puede establecerlo en null o undefined antes de la asignación.

    Espero que esto ayude. Háganos saber si tiene alguna pregunta.

Comments are closed.