Dado lo siguiente:
let a; let b = false; let c = a && b === undefined; Según tengo entendido, undefined es un valor falso, entonces, ¿por qué c tiene un valor undefined en lugar de false ?
c termina undefined porque a no está undefined . El operador && se detiene con el primer valor que es falso a través de un proceso llamado cortocircuito .
Dado su ejemplo, a no está definido. Por lo tanto, a && ... es undefined && ... , y dado que indefinido es falso, el lado izquierdo tiene un cortocircuito . Eso significa que nunca evalúa el lado derecho.
Si el lado izquierdo es falso, no hay nada que el lado derecho de un && pueda hacer para cambiar eso. Para usar una analogía, false && anything siempre se evalúa como false y, en JavaScript, se detiene allí e ignora anything .
Ahora, la pregunta puede ser: "¿Por qué no devuelve false en lugar de undefined ?" MDN dice :
El operador lógico AND, &&
Si el primer objeto es falso, devuelve ese objeto.
false && "dog" // ↪ false 0 && "dog" // ↪ 0