seção
O Que é Coerção de Tipo?
Coerção de tipo é a conversão automática ou implícita de valores de um tipo de dado para outro no JavaScript. Segundo a especificação ECMAScript, o JavaScript realiza essas conversões através de um conjunto de "operações abstratas" — algoritmos internos como ToString, ToNumber e ToBoolean. Quando você usa operadores ou funções que esperam um certo tipo, o JavaScript vai converter (coagir) os valores para fazer a operação funcionar, às vezes de forma útil, às vezes surpreendente. Entender essas regras de conversão te ajuda a escrever código previsível e livre de bugs.
A Analogia do Tradutor Excessivamente Prestativo
Imagine o JavaScript como um tradutor excessivamente prestativo. Quando você lhe dá valores de tipos diferentes, ele tenta "ajudar" convertendo-os — às vezes corretamente, às vezes... criativamente.
Esse comportamento "prestativo" se chama coerção de tipo. O JavaScript converte valores automaticamente de um tipo para outro. Às vezes é útil, às vezes cria bugs que vão assombrar seus sonhos.
┌─────────────────────────────────────────────────────────────────────────┐│ COERÇÃO DE TIPO: O CAMALEÃO │├─────────────────────────────────────────────────────────────────────────┤│ ││ ┌─────────┐ ┌─────────┐ ││ │ "5" │ ──── + 3 ────────► │ "53" │ String venceu! ││ │ string │ │ string │ ││ └─────────┘ └─────────┘ ││ ││ ┌─────────┐ ┌─────────┐ ││ │ "5" │ ──── - 3 ────────► │ 2 │ Number venceu! ││ │ string │ │ number │ ││ └─────────┘ └─────────┘ ││ ││ Mesmos valores, operadores diferentes, resultados diferentes! ││ │└─────────────────────────────────────────────────────────────────────────┘Coerção Explícita vs Implícita
Existem duas formas de a coerção acontecer:
Coerção Explícita
Você controla a conversão usando funções embutidas. Isso é previsível e intencional.
// VOCÊ decide quando e como converterNumber("42") // 42String(42) // "42"Boolean(1) // true parseInt("42px") // 42parseFloat("3.14") // 3.14Essas funções — Number(), String(), Boolean(), parseInt() e parseFloat() — dão controle total. É o caminho seguro. Você sabe exatamente o que está acontecendo.
Coerção Implícita
O JavaScript converte tipos automaticamente quando operadores ou funções esperam um tipo diferente.
// JavaScript "ajuda" sem perguntar"5" + 3 // "53" (número virou string)"5" - 3 // 2 (string virou número) if ("hello") {} // string virou boolean (true) 5 == "5" // true (tipos foram coagidos)É aqui que os bugs se escondem. Aprenda as regras ou sofra as consequências!
Por Que o JavaScript Faz Isso?
JavaScript é uma linguagem dinamicamente tipada. Variáveis não têm tipos fixos. Essa flexibilidade significa que o JavaScript precisa descobrir o que fazer quando os tipos não coincidem.
// Em JavaScript, variáveis podem guardar qualquer tipolet x = 42; // x é um númerox = "hello"; // agora x é uma stringx = true; // agora x é um boolean // Então o que acontece aqui?let result = x + 10; // JavaScript deve decidir como lidar com issoOutras linguagens lançariam um erro. O JavaScript tenta fazer funcionar. Se isso é uma feature ou um bug... depende de quem você perguntar!