Desarrollo en curso, en breve se publicarán el resto de temas.

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".

Diferencia clave: undefined es asignado automáticamente; null se asigna deliberadamente.


1.3. Tipos Complejos: Object y Array

Object

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

El 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:

  1. ¿Por qué crees que typeof null retorna "object" si null no es un objeto? ¿Cómo impactaría en tu código?

  2. Explica con tus palabras la diferencia entre undefined y null. ¿Cuándo usarías cada uno?

  3. ¿Qué ventajas y desventajas tiene que JavaScript sea débilmente tipado?

  4. Dado "10" + 5 - 3, ¿cuál será el resultado? Explica paso a paso cómo JavaScript lo evalúa.

  5. ¿Cuándo preferirías usar Number() vs parseInt() para convertir a número?

  6. 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?