Javascript III

🧮 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…

🧮 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 typeof es 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 variableNoDeclarada no 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