🧮 El operador typeof: ¿nuestro amigo o traidor?
Una herramienta fundamental cuando empezamos a jugar con tipos en JavaScript es typeof. Este operador inspecciona el tipo de un valor y siempre devuelve un string con alguno de siete posibles resultados.
¿Fácil, no? Veamos qué pasa con algunos ejemplos:
typeof undefined // "undefined"
typeof true // "boolean"
typeof 42 // "number"
typeof "42" // "string"
typeof { foo: "bar" } // "object"
typeof Symbol() // "symbol"
Hasta acá todo muy prolijo. Pero cuidado… porque como dice el viejo refrán JavaScriptiano:
No todo lo que dice
typeofes oro.
Importante: typeof no tiene una correspondencia perfecta con los tipos definidos en la especificación de ECMAScript. Es útil, sí, pero también limitado.
💥 Nuestro primer bug histórico: el infame caso de null
Ahora sí, llegamos al clásico de clásicos, digno de un museo de bugs:
typeof null // "object"
¡¿Cómo?! ¿null es un object? 😱
Sí. Esto es un bug reconocido en JavaScript desde los 90s. Surgió por una mala decisión de implementación en versiones tempranas de JS, y nunca fue corregido por razones de compatibilidad con el ecosistema web.
En resumen: sí, es un bug; no, no sos vos, es JavaScript.
Podés comprobarlo con esta trampita:
let a = null;
console.log(!a && typeof a === "object"); // true
Este comportamiento tan JS nos recuerda que no debemos confiar ciegamente en typeof para todo. En el caso de null, lo más seguro es comparar directamente con null:
if (a === null) {
console.log("Sí, esto es null posta");
}
🎯 ¿Cuándo usar typeof y cuándo no?
✔️ Es útil para saber si algo es un string, number, boolean o undefined.
❌ No lo uses para detectar null ni para saber si algo es un Array (te va a decir "object").
Para esos casos, mejor usar:
Array.isArray(valor); // true si es array
valor === null; // true si es null
En resumen: typeof es como un amigo algo torpe pero bien intencionado. Usalo, querelo, pero no le confíes tus datos más sensibles.
🧠 Cosas curiosas sobre typeof: funciones y variables no declaradas
Si pensabas que ya lo sabías todo sobre typeof, te tengo noticias: ¡todavía nos quedan un par de sorpresas!
🧪 typeof aplicado a funciones
En JavaScript, las funciones son técnicamente objetos, pero el operador typeof hace una excepción especial para ellas:
typeof function(){}
// "function"
Este es el único caso donde typeof devuelve algo distinto a los siete tipos clásicos de JS. Técnicamente, "function" no es un tipo primitivo, pero es tan útil que el lenguaje decidió tratarlas así por comodidad.
😮 ¿Y si uso typeof con algo que no está definido?
Acá viene una de las grandes ventajas del operador: ¡no lanza error si la variable no está declarada!
typeof a;
// "undefined"
Aunque a no fue declarada en ningún lado, el uso de typeof no genera un ReferenceError. Eso lo hace perfecto para ciertas verificaciones seguras:
if (typeof otro === "undefined") {
console.log("¡La variable 'otro' no está definida!");
}
Podés usar este truco cuando querés comprobar si una variable global existe sin que explote tu código.
📌 Resumen rápido
typeof function() {}te devuelve"function", un caso especial.typeof variableNoDeclaradano lanza error, devuelve"undefined".- Esto es útil para escribir código defensivo o verificaciones seguras.
Dato curioso: esta característica fue intencionalmente diseñada así en los primeros días de JavaScript, como una forma de hacer que el lenguaje sea más tolerante a errores.
Deja un comentario