ดังนั้นฉันจึงเล่นไปเรื่อย ๆ เพื่อดูว่าการกำหนดจำนวนมากทำงานอย่างไรใน JavaScript
ก่อนอื่นฉันลองใช้ตัวอย่างนี้ในคอนโซล:
a = b = {};
a.foo = 'bar';
console.log(b.foo);
ผลลัพธ์คือ "bar" แสดงในการแจ้งเตือน นั่นก็ยุติธรรมเพียงพอaและbเป็นเพียงนามแฝงของวัตถุเดียวกัน จากนั้นฉันก็คิดว่าฉันจะทำให้ตัวอย่างนี้ง่ายขึ้นได้อย่างไร
a = b = 'foo';
a = 'bar';
console.log(b);
มันก็เหมือนกันใช่มั้ย? คราวนี้กลับfooไม่barเป็นไปตามที่ฉันคาดหวังจากพฤติกรรมของตัวอย่างแรก
ทำไมสิ่งนี้ถึงเกิดขึ้น?
หมายเหตุตัวอย่างนี้สามารถทำให้ง่ายขึ้นด้วยรหัสต่อไปนี้:
a = {};
b = a;
a.foo = 'bar';
console.log(b.foo);
a = 'foo';
b = a;
a = 'bar';
console.log(b);
(ฉันสงสัยว่า JavaScript ถือว่าไพรเมทีฟเช่นสตริงและจำนวนเต็มแตกต่างจากแฮชแฮชจะส่งคืนตัวชี้ในขณะที่ไพรเวต "คอร์" ส่งคืนสำเนาของตัวเอง)