Capítulo 1: Tipos de Datos
JavaScript es un lenguaje dinámicamente tipado, lo que significa que las variables no están vinculadas a un tipo específico en el momento de la declaración. Esta característica otorga una flexibilidad poderosa al lenguaje, pero también requiere comprensión para evitar errores sutiles. En este capítulo, exploraremos los pilares de los tipos de datos en JavaScript y cómo el lenguaje maneja las conversiones entre ellos.
1.1. Tipado Dinámico y Debilidad de Tipos
A diferencia de lenguajes como Java o C++, donde debes declarar explícitamente el tipo de una variable, JavaScript permite que una variable cambie de tipo durante su ejecución. Esta característica se denomina tipado dinámico.
let valor = 42; // Número
console.log(typeof valor); // "number"
valor = "Hola mundo"; // Ahora es una cadena
console.log(typeof valor); // "string"
valor = true; // Ahora es un booleano
console.log(typeof valor); // "boolean"JavaScript también es un lenguaje débilmente tipado, lo que significa que el lenguaje intentará realizar conversiones automáticas (coerción) entre tipos cuando sea necesario, incluso si esto puede llevar a comportamientos inesperados.
console.log("5" + 3); // "53" (concatenación, no suma)
console.log("5" - 3); // 2 (conversión a número)
console.log(true + 1); // 2 (true se convierte a 1)1.2. Tipos Primitivos
JavaScript tiene 7 tipos primitivos (también llamados tipos básicos). Los primitivos son valores que no son objetos y no tienen métodos propios, aunque JavaScript te permite acceder a métodos como si fueran objetos gracias al autoboxing.
number
Representa números, tanto enteros como decimales. A diferencia de otros lenguajes, JavaScript no distingue entre enteros y decimales; todos son del tipo number.
Precisión de punto flotante: Los números en JavaScript se representan según el estándar IEEE 754 (64 bits), lo que ocasiona problemas de precisión con decimales.
string
Representa texto. Las cadenas pueden delimitarse con comillas simples, dobles o comillas invertidas (template strings).
boolean
Representa un valor lógico: true o false. Es fundamental para estructuras de control como if y bucles.
symbol
Introducido en ES6, symbol crea identificadores únicos. Cada símbolo es diferente de cualquier otro, incluso si se crean con la misma descripción.
bigint
Introducido en ES2020, permite trabajar con enteros arbitrariamente grandes, más allá del límite de number (2^53 - 1).
undefined
Significa que una variable ha sido declarada pero no asignada, o una función no retorna explícitamente un valor.
null
Representa la ausencia intencional de un valor. A diferencia de undefined, null debe asignarse explícitamente. Es un valor que el programador usa para indicar "sin valor".
1.3. Tipos Complejos: Object y Array
Object y ArrayObject
Los objetos son colecciones de pares clave-valor. Aunque los exploraremos en profundidad más adelante, es importante reconocer que casi todo en JavaScript es un objeto.
Array
Los arrays son un tipo especial de objeto que almacena colecciones ordenadas de valores. Se accede a sus elementos mediante índices numéricos.
1.4. El Operador typeof y Detección de Tipos
typeof y Detección de TiposEl operador typeof retorna una cadena indicando el tipo de una variable.
Para diferenciar entre null y objetos reales, usa una comparación explícita:
1.5. Coerción de Tipos
La coerción es la conversión automática entre tipos. JavaScript realiza coerciones frecuentemente, a veces de manera sorprendente.
Coerción implícita
El operador + es ambiguo: puede sumar números o concatenar cadenas.
Reglas de coerción:
Si uno de los operandos de
+es una cadena, ambos se convierten a cadena.Para otros operadores aritméticos, se convierten a número.
Valores truthy y falsy
En contextos booleanos, ciertos valores se convierten a false (falsy) y otros a true (truthy).
Falsy: 0, "" (cadena vacía), null, undefined, NaN, false
Truthy: Cualquier otro valor (incluyendo "0", [], {})
Coerción explícita
Convierte tipos de forma deliberada y clara:
Resumen del Capítulo
Este capítulo ha introducido los tipos de datos fundamentales de JavaScript: los 7 tipos primitivos (number, string, boolean, symbol, bigint, undefined, null) y los tipos complejos (object, array). Comprender que JavaScript es dinámicamente tipado y débilmente tipado es crucial para evitar errores sutiles derivados de coerciones inesperadas.
💡 Conceptos Clave:
Tipado dinámico: Las variables pueden cambiar de tipo durante la ejecución
Siete tipos primitivos: number, string, boolean, symbol, bigint, undefined, null
null vs undefined: null es intencional, undefined es automático
typeof operator: Detecta tipos, pero ten cuidado con null y arrays
Coerción: Conversiones automáticas (implícitas) y deliberadas (explícitas)
Truthy/Falsy: Comportamiento en contextos booleanos
Autoboxing: Acceso a métodos en primitivos mediante envoltura automática
🤔 Preguntas de Reflexión:
¿Por qué crees que
typeof nullretorna"object"sinullno es un objeto? ¿Cómo impactaría en tu código?Explica con tus palabras la diferencia entre
undefinedynull. ¿Cuándo usarías cada uno?¿Qué ventajas y desventajas tiene que JavaScript sea débilmente tipado?
Dado
"10" + 5 - 3, ¿cuál será el resultado? Explica paso a paso cómo JavaScript lo evalúa.¿Cuándo preferirías usar
Number()vsparseInt()para convertir a número?Diseña un sistema de validación que determine si un valor es un "booleano verdadero" (no solo truthy).
Última actualización
¿Te fue útil?