typeof
es un operador JavaScript que al ser llamado sobre una variable, devuelve el tipo de dato que dicha variable contiene. Entre otras cosas, podemos utilizarlo para validar de parámetros de una función o para comprobar si una variable ha sido definida.
El operador typeof
es muy útil porque nos permite consultar fácilmente el tipo de datos que una variable contiene. Esto es importante en JavaScript porque se trata de un lenguaje escrito dinámicamente. Esto significa que no necesitamos asignar un tipo de datos fijo a una variable cuando la creamos. Al no restringir las variables de esta manera, el tipo de datos que contienen puede cambiar durante la ejecución de un programa.
Por ejemplo:
var x = 12345; // number
x = 'string'; // string
x = { key: 'value' }; // object
Como podemos ver en el ejemplo anterior, una variable puede cambiar de tipo durante la ejecución de un programa. En nuestro trabajo diario puede ser complejo llevar un registro de estos cambios y es en esos casos donde el operador typeof
será útil.
El operador typeof
devuelve una cadena de texto que representa el tipo de dato actualmente contenido en una variable. Para usarlo podemos escribir typeof(variable)
o typeof variable
. Volviendo al ejemplo anterior, podemos utilizarlo para comprobar el tipo de dato de la variable x
en cada paso:
var x = 12345;
console.log(typeof x) // number
x = 'string';
console.log(typeof x) // string
x = { key: 'value' };
console.log(typeof x) // object
De esta manera, por ejemplo, podemos comprobar el tipo de dato de una variable dentro de una función y continuar en caso de obtener el resultado esperado.
Aquí tenemos una función de ejemplo que puede tomar una variable y anunciar si es una cadena de texto o un número:
function doSomething(x) {
if(typeof(x) === 'string') {
alert('x is a string')
} else if(typeof(x) === 'number') {
alert('x is a number')
}
}
También podemos utilizar el operador typeof
para asegurarnos de que una variable ha sido definida antes de utilizarla en nuestro código. Esto puede ser útil para prevenir un error muy común, intentar acceder a una variable cuyo valor aún no ha sido definido.
function(x){
if (typeof(x) === 'undefined') {
console.log('variable x is not defined');
return;
}
// aquí continuamos con la función...
}
Cuando trabajamos con números, el valor que devuelve el operador typeof
puede no ser lo que estamos esperando.
Los números pueden convertirse en NAN (No es un número) por distintos motivos.
console.log(typeof NaN); //"number"
Quizás estamos intentando multiplicar un número con un objeto, porque olvidamos acceder al número que ese objeto contiene:
var x = 1;
var y = { number: 2 };
console.log(x * y); // NaN
console.log(typeof (x * y)); // number
En este caso, no será suficiente utilizar typeof
para comprobar que el resultado es un número, ya que NaN
también cumple con esta condición.
En la siguiente función, vamos a comprobar que el valor es un número pero excluyendo a NaN
de la condición:
function isNumber(data) {
return (typeof data === 'number' && !isNan(data));
}
Si bien este es un método muy útil para validar tipos de datos, también debemos tener cuidado porque JavaScript tiene algunas rarezas y entre ellas encontramos el resultado de typeof
en algunas situaciones particulares. En JavaScript muchas cosas son inesperadamente objetos, como por ejemplo los arreglos (arrays) y los valores null
var x = [1,2,3,4];
console.log(typeof x) // object
console.log(typeof null) // object
Traducido del artículo - JavaScript Data Types: Typeof Explained