Sobes.tech
Junior

¿En qué consiste la diferencia entre los diferentes tipos de datos?

sobes.tech AI

Respuesta de la IA

En JavaScript, los datos se dividen en tipos primitivos y objetos.

Tipos primitivos:

  • String: Secuencia de caracteres. Inmutable.
  • Number: Números, incluyendo enteros y de punto flotante, así como Infinity, -Infinity y NaN.
  • Boolean: Valor lógico (true o false).
  • Null: Valor especial que representa la ausencia de un objeto.
  • Undefined: Valor de una variable a la que no se le ha asignado un valor.
  • Symbol: Tipo primitivo único e inmutable, utilizado para identificadores de propiedades de objetos.
  • BigInt: Números enteros de longitud arbitraria.

Objetos:

  • Object: Colección de pares clave-valor. Mutable. Ejemplos: arreglos, funciones, expresiones regulares, fechas.

Diferencias principales:

  1. Mutabilidad: Los tipos primitivos son inmutables, es decir, no se puede cambiar su valor directamente. Al intentar modificarlo, se crea una copia nueva. Los objetos son mutables, sus propiedades pueden añadirse, eliminarse y modificarse.
  2. Paso por valor/por referencia: Los tipos primitivos se pasan por valor (se copia el valor mismo). Los objetos se pasan por referencia (se copia la referencia al lugar en memoria donde se almacena el objeto).
  3. Comparación: Los tipos primitivos se comparan por valor. Los objetos se comparan por referencia (dos variables que apuntan al mismo objeto en memoria).
// Ejemplos
let str1 = "hello";
let str2 = str1; // str2 obtiene una copia del valor de str1
str1 = "world"; // Se crea una nueva cadena "world" para str1
console.log(str2); // "hello" - str2 no cambió

let obj1 = { name: "Alice" };
let obj2 = obj1; // obj2 obtiene la referencia al mismo objeto que obj1
obj1.name = "Bob"; // Se modifica la propiedad del objeto al que apuntan ambas variables
console.log(obj2.name); // "Bob" - obj2 cambió

let num1 = 10;
let num2 = 10;
console.log(num1 === num2); // true - se comparan los valores

let objA = { value: 1 };
let objB = { value: 1 };
console.log(objA === objB); // false - se comparan las referencias (apuntan a objetos diferentes aunque tengan el mismo contenido)

Tabla de diferencias:

Característica Tipos primitivos Objetos
Mutabilidad Inmutables Mutables
Paso Por valor Por referencia
Comparación Por valor Por referencia
Almacenamiento Directamente en la variable Referencia a la ubicación en memoria
Tipos de datos String, Number, Boolean, Null, Undefined, Symbol, BigInt Objeto (incluyendo arreglos, funciones, etc.)