Hace unos días, un seguidor de Laserants.com, hizo la pregunta de si una función era un objeto. Mi respuesta fue en torno a explicar cómo casi todo es un objeto en JavaScript. He acá una clasificación de los types
en JavaScript:
- Primitivos (cadena, número, nulo, booleano, indefinido, símbolo): estos son tipos de datos inmutables. No son objetos, no tienen métodos y se almacenan en memoria por valor.
- No primitivos (funciones, matrices y objetos): estos son tipos de datos mutables. Son objetos y se almacenan en memoria por referencia.
##¿Qué es un objeto?
La clase Object
representa uno de los tipos de datos de JavaScript. Se utiliza para almacenar varias colecciones con clave y entidades más complejas. Podemos decir que en JavaScript, un objeto es un entidad independiente con propiedades y tipos.
Para crear un objeto podemos hacer algo como esto:
const obj = {
propiedad1: 'Valor 1',
propiedad2: 'Valor2'
}
Ahora vamos a añadir una nueva propiedad al objeto
obj.propiedad3 = 'Valor 3';
Arrays como objetos
Un array es un objeto en JavaScript, y lo podemos demostrar de dos formas:
- Usando typeof:
var a = [1,2,3];
console.log(typeof a); // Salida: 'object'
- Añadiendo más propiedades o claves
const arr = [1,2,3];
arr.saludar = () => console.log("hola"); // Añadiendo la propiedad saludar al objeto arr.
console.log(arr.length); // Salida: 3
console.log(arr.saludar); // Salida: hola
console.log(arr); // Salida: (3) [1, 2, 3, saludar: ƒ]
Funciones como Objeto
Ahora veamos el caso de un Array
con este ejemplo, primero crearemos una función
function saludar() {
console.log("Hola!");
}
Ahora le añadiremos más propiedades
saludar.nombre = "Fernando";
saludar.conNombre = function() {
console.log(`Hola, ${this.nombre}!`)
}
Imprimamos unos logs
saludar() // Salida: Hola!
console.log(saludar.nombre); // Salida: Fernando
saludar.conNombre() // Salida: Hola, Fernando!
String
Existen tipos de datos no-primitivos, que son objetos, y que tienen su alternativa primitiva, entre estos tenemos el String
(nótese la mayúscula en la S). Veamos un ejemplo de como un String
puede ser un objeto
const nombrePrimitivo = "Carlos";
const nombreNoPrimitivo = new String("Fernando");
Intentando añadir propiedades a ambos objetos
nombrePrimitivo.apellido = "Arias";
nombreNoPrimitivo.apellido = "Barrios";
Añadiendo logs
console.log(nombrePrimitivo); // Salida: Carlos
console.log(nombrePrimitivo.apellido); // Salida: undefined
console.log(typeof nombrePrimitivo); // Salida: string
console.log(nombreNoPrimitivo); // Salida: String {'Fernando', apellido: 'Barrios**'}
console.log(nombreNoPrimitivo.apellido); // Salida: 'Barrios'
console.log(typeof nombreNoPrimitivo); // Salida: object