Null e undefined são forçados a false na operação null==undefined
. Então, por que eles também não são forçados a false nas operações null==false
or undefined==false
?
let undefinedEqualsFalse = undefined == false;
let nullEqualsFalse = null == false;
let nullEqualsUndefined = null == undefined;
console.log('undefinedEqualsFalse', undefinedEqualsFalse);
console.log('nullEqualsFalse', nullEqualsFalse);
console.log('nullEqualsUndefined', nullEqualsUndefined);
saída:
indefinidoEqualsFalse falso
nuloEqualsFalse falso
nuloEqualsIndefinido verdadeiro
O operador == segue regras específicas de coerção de tipo. null e undefined são iguais entre si por definição especial em JavaScript, mas não são iguais a false porque a comparação com booleanos envolve primeiro converter o booleano em um número (false se torna 0), e nem null nem undefined são iguais a 0.