Una de las características más particulares de JavaScript, es el comportamiento de los tipos de datos, pero conociendo su comportamiento nos permite entender como se comportan nuestros datos durante la ejecución.
Este contenido lo publiqué primero en mi newsletter, la semana después de publicar el newsletter publico en mi blog, si quieres ser el primero en leer suscríbete
¿Que es un tipo?
Básicamente los tipos definen el comportamiento que van a tener los datos.
“Un tipo es un conjunto integrado de características intrínsecas que identifican el comportamiento de un valor particular y lo distingue de otros valores, tanto para el engine y el desarrollador” You Don’t Know JS: Types & Grammar
¿Cuales tipos existen?
La especificación del lenguaje define los tipos:
- string
- number
- boolean
- null
- undefined
- object
- symbol
Antes de continuar, es preciso decir que en JavaScript, las variables no tienen tipos, Los valores son quienes los tienen. Las variables pueden almacenar cualquier tipo.
“Las variables en JavaScript no tienen tipos, los valores son quienes tienen tipos”
Estos tipos se dividen en dos:
Primitivos
string, number, boolean, null, undefined
Entendamos el comportamiento de estos.
Cuando definimos un valor primitivo:
let variable = “hola”; //string
El nombre de la variable se instancia en su scope, y este nombre hace referencia a la ubicación en memoria, donde está almacenado el valor.
Ahora, si asignamos esta variable a otra, el valor se copia, a otra posición en memoria, y cada variable apunta a una ubicación distinta.
Este comportamiento, hace que si nosotros declaramos un valor primitivo dentro de una variable con const, será inmutable, ya que este no podrá ser reasignado.
Por referencia
object
Los objetos definen subtipos, los cuales son: String, Number, Boolean, Object, Function, Array , Date, RegExp, Error
Cuando definimos un objeto:
let obj = {nombre: ‘yeison’}
El nombre de la variable se instancia en su scope, y este hace referencia al objeto en memoria, este contiene una lista de sus propiedades, que a su vez hacen referencia a donde están almacenados los valores.
Ahora si, asignamos obj a otra variable, el objeto al que hace referencia no se va a copiar, lo que va a suceder, es que la nueva variable, es otra referencia al mismo objeto.
let obj2 = obj
Por eso, si cambiamos la propiedad nombre de obj2, ambas variables apuntar al mismo objeto, se va a cambiar también en obj
obj2.nombre = “camilo”;
console.log(obj.nombre) // camilo
Este es el comportamiento de los objetos en JavaScript, y funciona igual para objetos anidados dentro de otros objetos
let identify = {
name: {
first: "yeison",
},
social: {
twitter: "@yeion7"
}
};
Que seria algo asi
y si yo hiciera
let identify2 = identify.name
identify2 = {first: “juan”}
console.log(identify.name.first) // ???
¿Que me mostraria en consola?
Como vimos no todo en JavaScript es un objeto, pero si todos los valores se relacionan a través de referencias/punteros, tener un entendimiento sólido de como funcionan los diferentes tipos nos va a permitir entender como trabajar con nuestros valores, sin llegar a tener mutaciones inesperadas.
Te recomiendo ver este video donde se muestran algunos errores del lenguaje referente a los tipos.