Fácil JavaScript
Comparando com === e ===
Enunciado
Crie um programa que compare os valores 0, '0', false e null usando == e ===, e imprima o resultado de cada comparação. Use console.log para mostrar se são iguais ou não.
Requisitos
- Imprima o resultado de
0 == '0'e0 === '0'. - Imprima o resultado de
false == 0efalse === 0. - Imprima o resultado de
null == undefinedenull === undefined.
Código inicial
// Compare os valores usando == e ===
// e imprima os resultados
Saída esperada
0 == '0': true
0 === '0': false
false == 0: true
false === 0: false
null == undefined: true
null === undefined: false
Ver dica
Lembre-se: == converte tipos antes de comparar; === não converte. Use template strings para formatar a saída.
Mostrar solução
// Comparações com == e ===
console.log(`0 == '0': ${0 == '0'}`); // true
console.log(`0 === '0': ${0 === '0'}`); // false
console.log(`false == 0: ${false == 0}`); // true
console.log(`false === 0: ${false === 0}`); // false
console.log(`null == undefined: ${null == undefined}`); // true
console.log(`null === undefined: ${null === undefined}`); // false
Passo a passo
- Usamos
console.logcom template strings para imprimir cada comparação de forma legível. 0 == '0'étrueporque o operador==converte a string'0'para o número0antes de comparar.0 === '0'éfalseporque===exige que os tipos sejam iguais; número e string são diferentes.false == 0étrueporquefalseé convertido para0na comparação frouxa.false === 0éfalseporque os tipos boolean e number são diferentes.null == undefinedétruepor definição da linguagem: eles são considerados iguais na comparação frouxa.null === undefinedéfalseporque são tipos diferentes (null e undefined).
Por que funciona
A igualdade frouxa (==) segue regras de coerção definidas na especificação ECMAScript. Quando os tipos diferem, o JavaScript tenta convertê-los para um tipo comum (geralmente número) antes de comparar. Já a igualdade estrita (===) compara tipo e valor sem conversão. Por isso, 0 == '0' é true, mas 0 === '0' é false.
Erros comuns
- Achar que
null == undefinedéfalse. Na verdade, étruepor definição. Se quiser diferenciar, use===. - Usar
==sem saber as regras de coerção. Por exemplo,[] == falseétrueporque ambos são convertidos para0. Prefira===. - Esquecer que
NaNnão é igual a nada, nem a si mesmo:NaN == NaNeNaN === NaNsãofalse. UseObject.is(NaN, NaN)ouNumber.isNaN().
Outra forma de resolver
Você pode usar Object.is para comparações mais previsíveis, mas ele não é equivalente a == ou === em todos os casos. Para este exercício, === é o mais indicado.
Saída esperada
0 == '0': true
0 === '0': false
false == 0: true
false === 0: false
null == undefined: true
null === undefined: false