JavaScript Fundamentos Básico
Igualdade e coerção
Em JavaScript, a igualdade é um conceito central e muitas vezes confuso por causa da coerção de tipos. O operador == (igualdade frouxa) converte os operandos para o mesmo tipo antes de comparar, enquanto === (igualdade estrita) não faz conversão: se os tipos forem diferentes, o resultado é false. Entender essa diferença evita bugs sutis.
Além disso, valores são classificados como truthy (verdadeiros) ou falsy (falsos) quando usados em contextos booleanos, como em if ou &&. A lista de valores falsy é curta: false, 0, -0, 0n (BigInt zero), '' (string vazia), null, undefined e NaN. Todo o resto é truthy, incluindo '0', [] e {}.
A coerção implícita acontece em operações como +, -, *, comparações e na própria igualdade frouxa. Por exemplo, '5' - 1 resulta em 4 (número), enquanto '5' + 1 resulta em '51' (string). Já Object.is é uma terceira forma de comparar, que se comporta como === exceto para NaN e -0: Object.is(NaN, NaN) é true e Object.is(-0, 0) é false.
Neste card, você vai praticar esses quatro tópicos com exemplos e exercícios que mostram como evitar armadilhas comuns e escolher o operador certo para cada situação.
Pontos-chave
==compara após coerção de tipos;===compara sem coerção e é o recomendado na maioria dos casos.- Valores falsy:
false,0,-0,0n,'',null,undefined,NaN. Todo o resto é truthy. - A coerção implícita ocorre em operações aritméticas, comparações e na igualdade frouxa.
Object.isé como===, mas trataNaNcomo igual a si mesmo e diferencia-0de0.- Prefira
===eObject.ispara evitar surpresas; use==apenas quando souber exatamente o que está fazendo.
// Igualdade e coerção em JavaScript
// == faz coerção de tipos antes de comparar
console.log(1 == '1'); // true
console.log(0 == false); // true
console.log(null == undefined); // true
// === não faz coerção: tipos diferentes => false
console.log(1 === '1'); // false
console.log(0 === false); // false
console.log(null === undefined); // false
// Truthy e falsy
if ('') {
console.log('string vazia é truthy');
} else {
console.log('string vazia é falsy'); // executa
}
if ([]) {
console.log('array vazio é truthy'); // executa
}
// Coerção implícita em operações
console.log('5' - 1); // 4 (string convertida para número)
console.log('5' + 1); // '51' (número convertido para string)
console.log(+'42'); // 42 (conversão explícita para número)
// Object.is: comparação mais precisa
console.log(Object.is(NaN, NaN)); // true
console.log(NaN === NaN); // false
console.log(Object.is(-0, 0)); // false
console.log(-0 === 0); // true