Si tengo una referencia simple a un objeto como en el primer ejemplo, la forma en que lo entiendo es que xa y ya apuntan a la misma dirección que tiene el valor 1. Cuando cambio el valor en esa dirección a 2, el valor cambia en tanto x como y.
Pero en el segundo ejemplo, uso Object.assign para crear y. xey son referencias diferentes, pero xa y ya apuntan a la misma dirección. Entonces, ¿por qué cuando cambio xa, ya no cambia en este caso?
// simple reference var x = {a:1}; var y = x; console.log(x === y); // true console.log(xa === ya) // true xa = 2; console.log(ya); // 2 console.log('end first example'); // same example but with Oject.assign var x = {a:1}; var y = Object.assign({}, x); console.log(x === y); // false console.log(xa === ya); // true, xa and ya point to the same address xa = 2; console.log(ya); // 1, I was expecting this to be 2