Fundamentos · unidade 1 de 27
Tipos, coerção e igualdade
Antes de aplicar a regra, normalize a entrada.
01 / 07Use as setas do teclado ou deslize
Leitura
Por que dados vindos de uma API precisam ser interpretados de forma previsível antes de qualquer regra de negócio.
No backend, esse fundamento aparece quando o código transforma entrada em decisão. O detalhe de linguagem deixa de ser acadêmico no momento em que altera um payload, uma regra de negócio ou a forma como uma falha chega à camada seguinte.
A forma mais útil de estudar é ligar a sintaxe a um contrato observável: o que entra, o que pode mudar, qual resultado sai e qual erro deve continuar o fluxo. É esse raciocínio que os exemplos e exercícios desta unidade procuram treinar.
Código
"5" + 3 // "53"
"5" - 3 // 2
"1" == 1 // true
"1" === 1 // falseO que fica
- Coerção implícita muda o significado de operadores.
- Validação e normalização fazem parte do contrato da API.
- Igualdade estrita reduz decisões invisíveis no código.
Prática guiada.Leia, rode, quebre e explique cada exercício.
Prática guiada / unidade 01
Um problema de cada vez.
Leia o contrato, escreva sua tentativa e confira os casos esperados. A resolução de referência permanece visível ao final de cada exercício.
classifyValue(value)
01 / Entenda
Enunciado
retorna uma string descrevendo o tipo real
do valor: "null", "undefined", "nan", "number", "string",
"boolean", "array", "function", "symbol", "bigint" ou
"object". Cuidado com o resultado de typeof null e com NaN.
02 / Implemente
Sua tentativa
Comece pela assinatura e resolva sem olhar a resposta.
function classifyValue(value) {
// Escreva sua solução aqui.
}03 / Preveja
Entrada e saída
Use estes exemplos para entender o contrato antes de programar.
Entrada / chamada
classifyValue(null)Retorno esperado
"null"Entrada / chamada
classifyValue(undefined)Retorno esperado
"undefined"Entrada / chamada
classifyValue(NaN)Retorno esperado
"nan"Entrada / chamada
classifyValue(42)Retorno esperado
"number"04 / Teste
Prove que funciona
O teste chama sua função e compara o resultado real com o esperado.
Como utilizar este teste
- 01Implemente a função usando exatamente o nome e os parâmetros do enunciado.
- 02Salve sua implementação em
exercises.js, na mesma pasta do teste. - 03Abra o terminal nessa pasta e execute o comando abaixo.
- 04Se falhar, compare “esperado” com “recebido”; essa diferença mostra o caso que precisa ser corrigido.
node --test --test-name-pattern="classifyValue" exercises.test.jsComportamentos cobertos
- casos básicos
Ver código completo do teste
test("classifyValue: casos básicos", () => {
assert.equal(classifyValue(null), "null");
assert.equal(classifyValue(undefined), "undefined");
assert.equal(classifyValue(NaN), "nan");
assert.equal(classifyValue(42), "number");
assert.equal(classifyValue("hi"), "string");
assert.equal(classifyValue(true), "boolean");
assert.equal(classifyValue([1, 2]), "array");
assert.equal(
classifyValue(() => {}),
"function",
);
assert.equal(classifyValue(Symbol("x")), "symbol");
assert.equal(classifyValue(10n), "bigint");
assert.equal(classifyValue({}), "object");
});Ainda travou?
Dicas graduais
Nível 1 — direção, sem código
Para classifyValue: typeof cobre quase tudo, mas tem duas exceções
famosas. Quais valores fazem typeof "mentir"?
Nível 2 — pista mais direta
classifyValue: typeof null === "object" e typeof NaN === "number".
Trate esses dois casos antes do typeof genérico.
Nível 3 — quase o código, mas ainda não a solução
classifyValue: comece com
if (value === null) return "null";
if (Number.isNaN(value)) return "nan";
e complete o restante com typeof e Array.isArray.
05 / Compare
Resolução
function classifyValue(value) {
if (value === null) {
return "null";
} else if (Number.isNaN(value)) {
return "nan";
} else if (Array.isArray(value)) {
return "array";
} else {
return typeof value;
}
}