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
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
InfinityyNaN. - string: texto entre comillas simples, dobles o acentos graves.
- boolean:
trueofalse. - 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...
console.log(typeof { a: 1 }); // 'object'
console.log(typeof [1, 2]); // 'object'
console.log(typeof function () {}); // 'function'Las trampas de typeof
null devuelve 'object'
console.log(typeof null); // 'object'Es un error histórico del lenguaje que se conserva por compatibilidad. Para comprobar null, compara directamente:
const valor = null;
console.log(valor === null); // trueLos arrays también son 'object'
Para distinguir un array:
console.log(Array.isArray([1, 2])); // true
console.log(Array.isArray({})); // falseNaN es de tipo number
console.log(typeof NaN); // 'number'
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN('hola')); // falseUna variable inexistente no falla con typeof
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:
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')); // 15Convierte 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 {}.
if ('0') console.log('Se ejecuta');
if ([]) console.log('Se ejecuta también');Tabla de comprobaciones
| Quiero saber si... | Usa |
|---|---|
| Es un número | typeof x === 'number' y no Number.isNaN(x) |
| Es texto | typeof x === 'string' |
| Es un array | Array.isArray(x) |
| Es null | x === null |
| Es undefined | x === undefined |
| Es una función | typeof x === 'function' |
Última actualización: . Los ejemplos se han comprobado en un navegador actual y en Node.js.