GUÍA · Fundamentos

Tipos de datos en JavaScript y el operador typeof

Conoce los tipos de datos de JavaScript (number, string, boolean, null, undefined, bigint, symbol y object), cómo comprobarlos con typeof y las trampas habituales.

JavaScript tiene siete tipos primitivos (number, string, boolean, undefined, null, bigint y symbol) y un tipo para estructuras, object. El operador typeof indica el tipo de un valor, con alguna excepción histórica que conviene conocer.

Tipos primitivos

JavaScript
console.log(typeof 42);          // 'number'
console.log(typeof 3.14);        // 'number'
console.log(typeof 'hola');      // 'string'
console.log(typeof true);        // 'boolean'
console.log(typeof undefined);   // 'undefined'
console.log(typeof 10n);         // 'bigint'
console.log(typeof Symbol('x')); // 'symbol'
  • number: enteros y decimales comparten tipo. Incluye Infinity y NaN.
  • string: texto entre comillas simples, dobles o acentos graves.
  • boolean: true o false.
  • undefined: una variable declarada sin valor, o una propiedad que no existe.
  • null: ausencia intencionada de valor.
  • bigint: enteros muy grandes, con sufijo n.
  • symbol: identificadores únicos, de uso avanzado.

Objetos

Todo lo que no es primitivo es un objeto: objetos literales, arrays, funciones, fechas, expresiones regulares...

JavaScript
console.log(typeof { a: 1 });     // 'object'
console.log(typeof [1, 2]);       // 'object'
console.log(typeof function () {}); // 'function'

Las trampas de typeof

null devuelve 'object'

JavaScript
console.log(typeof null); // 'object'

Es un error histórico del lenguaje que se conserva por compatibilidad. Para comprobar null, compara directamente:

JavaScript
const valor = null;
console.log(valor === null); // true

Los arrays también son 'object'

Para distinguir un array:

JavaScript
console.log(Array.isArray([1, 2])); // true
console.log(Array.isArray({}));     // false

NaN es de tipo number

JavaScript
console.log(typeof NaN);          // 'number'
console.log(Number.isNaN(NaN));   // true
console.log(Number.isNaN('hola')); // false

Una variable inexistente no falla con typeof

JavaScript
console.log(typeof noExiste); // 'undefined' (no lanza error)

Conversión entre tipos

JavaScript convierte tipos automáticamente en algunos operadores, y a veces el resultado sorprende:

JavaScript
console.log('8' + 2);        // '82'  (concatena)
console.log('8' - 2);        // 6     (convierte a número)
console.log(Number('8') + 2); // 10
console.log(String(42));     // '42'
console.log(Boolean(''));    // false
console.log(parseInt('15px')); // 15

Convierte de forma explícita con Number, String y Boolean. El código será más claro y tendrá menos sorpresas.

Valores falsy

En una condición, estos valores se tratan como false: false, 0, -0, 0n, '', null, undefined y NaN. Todo lo demás es *truthy*, incluidos '0', [] y {}.

JavaScript
if ('0') console.log('Se ejecuta');
if ([]) console.log('Se ejecuta también');

Tabla de comprobaciones

Quiero saber si...Usa
Es un númerotypeof x === 'number' y no Number.isNaN(x)
Es textotypeof x === 'string'
Es un arrayArray.isArray(x)
Es nullx === null
Es undefinedx === undefined
Es una funcióntypeof x === 'function'

Última actualización: . Los ejemplos se han comprobado en un navegador actual y en Node.js.