¿Por qué en JavaScript se dice que todo son objetos?
Se dice que en JavaScript todo son objetos porque, en su núcleo, la mayoría de los valores y estructuras de datos en JavaScript pueden comportarse como objetos o son efectivamente objetos. Aquí hay algunas razones clave:
1. Los tipos de datos primitivos tienen envoltorios de objeto
- Aunque JavaScript tiene tipos primitivos como
string,number,boolean,null,undefined,bigintysymbol, cuando se accede a métodos de estos valores, JavaScript automáticamente los envuelve en sus versiones de objeto. - Ejemplo:
Internamente, JavaScript convierte "Hola" en un new String("Hola"), lo que permite el acceso a métodos.
let str = "Hola";
console.log(str.toUpperCase()); // "HOLA"
2. Todo lo que no es primitivo es un objeto
- Los arrays (
[]), funciones (function), objetos ({}), fechas (new Date()), expresiones regulares (/regex/), y casi todas las demás estructuras de datos en JavaScript son objetos. - Ejemplo:
Aunque arr es un array, en JavaScript sigue siendo tratado como un objeto.
let arr = [1, 2, 3];
console.log(typeof arr); // "object"
3. Las funciones son objetos de primera clase
- En JavaScript, las funciones son en realidad objetos con una propiedad especial (
[[Call]]) que les permite ejecutarse. - Ejemplo:
Como puedes ver, una función puede tener propiedades, lo que confirma que es un objeto.
function saludar() {
console.log("Hola");
}
saludar.propiedad = "Soy un objeto";
console.log(saludar.propiedad); // "Soy un objeto"
4. Los objetos pueden extenderse dinámicamente
-
A diferencia de otros lenguajes más estrictos, en JavaScript se pueden agregar propiedades a objetos en cualquier momento.
-
Ejemplo:
let persona = { nombre: "Juan" };
persona.edad = 30;
console.log(persona); // { nombre: "Juan", edad: 30 }
5. El prototipo de los objetos
- Todos los objetos en JavaScript heredan propiedades y métodos de un prototipo (
Object.prototype,Array.prototype, etc.). - Ejemplo:
Aunque obj está vacío, hereda toString() de Object.prototype.
let obj = {};
console.log(obj.toString()); // "[object Object]"
Conclusión
En JavaScript, todo es un objeto o se comporta como tal, excepto los tipos de datos primitivos en su estado puro. Sin embargo, incluso estos pueden ser envueltos en objetos temporalmente para permitir el uso de métodos y propiedades. Esta flexibilidad es lo que da lugar a la afirmación de que "en JavaScript, todo es un objeto". 🚀