const abc = 5; const bcd = 5 console.log(abc===bcd)/// return true
Este resultado me sorprende.
Dado que a abc se le asignará una ubicación de memoria diferente ... y bcd también tiene una ubicación diferente
por qué esto está volviendo cierto
Si el código fuera
const abc = 5 const bcd = abc console.log(abc === bcd) ///true here make sense
Parece que estoy realmente confundido con el primer caso ya que abc y bcd son dos variables diferentes y no tienen relación entre ellas.
Cualquier artículo o blog relacionado realmente ayudaría.
En javascript, todas las primitivas (string, nubmer, bigint, boolean, undefined, symbol, null) son inmutables y se compararán por valor:
Todas las primitivas son inmutables, es decir, no se pueden alterar. Es importante no confundir una primitiva en sí misma con una variable a la que se le asigna un valor primitivo. A la variable se le puede reasignar un nuevo valor, pero el valor existente no se puede cambiar de la forma en que se pueden modificar objetos, matrices y funciones.
En comparación con eso, los objetos (esto también incluye matrices y funciones, básicamente todo lo que no es primitivo) son mutables y se compararán por identidad.
Ejemplo:
console.log("Primitives compare by value:"); console.log(5 === 5); // true console.log("foo" === "foo"); // true console.log(true === true); // true console.log("Objects compare by identity:"); console.log({} === {}); // false console.log([] === []); // false console.log(function(){} === function(){}); // false
Javascript también tiene objetos de contenedor para los tipos primitivos , que podrían ser la fuente de su pregunta.
Estos contenedores envuelven un valor primitivo y son, como sugiere el nombre, objetos. Entonces, para instancias de contenedor primitivo, su código sería correcto:
let a = new Number(1); let b = new Number(1); console.log("Primitive wrappers are objects:"); console.log(a === a); // true console.log(a === b); // false
Hay una diferencia fundamental en JavaScript entre valores primitivos (indefinidos, nulos, booleanos, números y cadenas) y objetos (incluidas matrices y funciones)
I. Las primitivas se comparan por valor :
II. Los objetos son diferentes a los primitivos.
Los objetos no se comparan por valor : dos objetos distintos no son iguales aunque tengan las mismas propiedades y valores.
Por lo tanto, los objetos a veces se denominan tipos de referencia para distinguirlos de los tipos primitivos de JavaScript.