En JavaScript, todos sabemos que {} !== {} : son objetos diferentes asignados en el montón. Pero estaba tratando de encontrar la razón en el nivel de especificación del idioma.
en https://tc39.es/ecma262/#sec-samevaluenonnumeric dice
- Si x e y tienen el mismo valor de objeto, devuelve verdadero. De lo contrario, devuelve falso.
Pero no me queda claro cómo la especificación define exactamente cuándo se considera que dos objetos tienen el mismo valor de Objeto. Como {} y {} claramente no tienen el mismo valor, pero ¿cómo se define exactamente en la especificación?
{} en este contexto es un ObjectLiteral , cuando la evaluación en tiempo de ejecución encuentra un ObjectLiteral de este tipo, llama a OrdinaryObjectCreate , que a su vez llama a MakeBasicObject , que devuelve un nuevo objeto.
Entonces dos ObjectLiterals no pueden ser SameObject.