Given the following:
let a;
let b = false;
let c = a && b === undefined;
In my understanding, undefined is a falsy value, so why is it that c has value undefined instead of false?
>Solution :
Given your example, a is undefined. Therefore, a && ... is undefined && ..., and since undefined is falsy, the left hand side short circuits. That means, it never evaluates the right hand side.
If the left hand side is falsy, there’s nothing the right-hand side of an && can do to change that. To use an analogy, false && anything always evaluates to false, and in JavaScript, it stops there and ignores anything.
Now, the question may be, "Why doesn’t it return false instead of undefined?" MDN says:
The logical AND operator, &&
If the first object is falsy, it returns that object
false && "dog" // ↪ false 0 && "dog" // ↪ 0