El operador
typeof
devuelve "objeto" para objetos, matrices y nulos. El operadortypeof
no devuelve "objeto" para funciones.
En JavaScript existen 5 tipos de datos diferentes que pueden contener valores:
string
number
boolean
object
function
Hay 6 tipos de objetos:
Object
Date
Array
String
Number
Boolean
Y 2 tipos de datos que no pueden contener valores:
null
undefined
El operador typeof
Puedes utilizar el operador typeof
para encontrar el tipo de datos de una variable de JavaScript.
Ejemplo:
typeof "John" // Devuelve "string"
typeof 3.14 // Devuelve "number"
typeof NaN // Devuelve "number"
typeof false // Devuelve "boolean"
typeof [1,2,3,4] // Devuelve "object"
typeof {name:'John', age:34} // Devuelve "object"
typeof new Date() // Devuelve "object"
typeof function () {} // Devuelve "function"
typeof myCar // Devuelve "undefined" *
typeof null // Devuelve "object"
Por favor observe:
El tipo de datos de
NaN
es númeroEl tipo de datos de una matriz es
object
.El tipo de datos de una fecha es
object
.El tipo de datos de nulo es
object
.El tipo de datos de una variable indefinida es indefinido *
El tipo de datos de una variable a la que no se le ha asignado un valor también es indefinido *
No puede usar
typeof
para determinar si un objeto JavaScript es una matriz (o una fecha).
Datos primitivos
Un valor de datos primitivo es un valor de datos único y simple sin propiedades ni métodos adicionales.
El operador typeof
puede devolver uno de estos tipos primitivos:
string
number
boolean
undefined
Ejemplo:
typeof "John" // Devuelve "string"
typeof 3.14 // Devuelve "number"
typeof true // Devuelve "boolean"
typeof false // Devuelve "boolean"
typeof x // Devuelve "undefined" (si x no tiene valor)
Datos complejos
El operador typeof
puede devolver uno de dos tipos complejos:
function
object
El operador typeof
devuelve object
para objetos, matrices y nulos.
El operador typeof
no devuelve object
para funciones.
Ejemplo:
typeof {name:'John', age:34} // Devuelve "object"
typeof [1,2,3,4] // Devuelve "object" (no "array", mira la nota abajo)
typeof null // Devuelve "object"
typeof function myFunc(){} // Devuelve "function"
El operador
typeof
devuelveobject
para matrices porque en JavaScript las matrices son objetos.
El tipo de datos de typeof
El operador typeof
no es una variable. Es un operador. Los operadores (+ - * /
) no tienen ningún tipo de datos.
Pero el operador typeof siempre devuelve una cadena (que contiene el tipo de operando).
La propiedad constructor
La propiedad constructor
devuelve la función constructora para todas las variables de JavaScript.
Ejemplo:
"John".constructor // Devuelve function String() {[native code]}
(3.14).constructor // Devuelve function Number() {[native code]}
false.constructor // Devuelve function Boolean() {[native code]}
[1,2,3,4].constructor // Devuelve function Array() {[native code]}
{name:'John',age:34}.constructor // Devuelve function Object() {[native code]}
new Date().constructor // Devuelve function Date() {[native code]}
function () {}.constructor // Devuelve function Function(){[native code]}
Puedes comprobar la propiedad constructor
para saber si un objeto es un Array
(contiene la palabra "Array"):
Ejemplo:
function isArray(myArray) {
return myArray.constructor.toString().indexOf("Array") > -1;
}
O incluso más simple, puedes verificar si el objeto es una función de Array:
Ejemplo:
function isArray(myArray) {
return myArray.constructor === Array;
}
Puedes verificar la propiedad constructor
para saber si un objeto es Date
(contiene la palabra Date
):
Ejemplo:
function isDate(myDate) {
return myDate.constructor.toString().indexOf("Date") > -1;
}
O incluso más simple, puedes verificar si el objeto es una función Date:
Ejemplo:
function isDate(myDate) {
return myDate.constructor === Date;
}
Indefinido
En JavaScript, una variable sin valor tiene el valor undefined
. El tipo tampoco está definido.
Ejemplo:
let car; // Valor es indefinido, tipo es indefinido
Cualquier variable se puede vaciar estableciendo el valor en undefined
. El tipo también será undefined
.
Ejemplo:
car = undefined; // Valor es indefinido, tipo es indefinido
Valores vacíos
Un valor vacío no tiene nada que ver con undefined
.
Una cadena vacía tiene tanto un valor legal como un tipo.
Ejemplo:
let car = ""; // El valor es "", el tipo es "string"
Nulo
En JavaScript, null
es "nada". Se supone que es algo que no existe.
Desafortunadamente, en JavaScript, el tipo de datos null
es un objeto.
Puedes considerar un error en JavaScript que
typeof null
sea un objeto. Debería sernull
.
Puedes vaciar un objeto configurándolo en null
:
Ejemplo:
let person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
person = null; // Ahora el valor es null, pero el tipo todavía es un object
También puedes vaciar un objeto configurándolo como undefined
:
Ejemplo:
let person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
person = undefined; // Ahora ambos, valor y tipo son undefined
Diferencia entre indefinido y nulo
undefined
y null
son iguales en valor pero diferentes en tipo:
Ejemplo:
typeof undefined // undefined
typeof null // object
null === undefined // false
null == undefined // true
El operador instanceof
El operador instanceof
devuelve verdadero si un objeto es una instancia del objeto especificado:
Ejemplo:
const cars = ["Saab", "Volvo", "BMW"];
(cars instanceof Array);
(cars instanceof Object);
(cars instanceof String);
(cars instanceof Number);
El operador void
El operador void evalúa una expresión y devuelve indefinido. Este operador se usa a menudo para obtener el valor primitivo indefinido, usando "void(0)" (útil cuando se evalúa una expresión sin usar el valor de retorno).
Ejemplo:
<a href="javascript:void(0);">
Useless link
</a>
<a href="javascript:void(document.body.style.backgroundColor='red');">
Haz clic para cambiar el color de fondo del cuerpo a rojo
</a>
W3Schools es el sitio de desarrolladores web más grande del mundo.