ฉันสับสนกับdeleteโอเปอเรเตอร์ของ JavaScript รับรหัสต่อไปนี้:
var obj = {
helloText: "Hello World!"
};
var foo = obj;
delete obj;
หลังจากชิ้นส่วนของรหัสนี้ได้รับการดำเนินการobjเป็นnullแต่ยังหมายถึงวัตถุที่ว่าเหมือนfoo objฉันเดาว่าวัตถุนี้เป็นวัตถุเดียวกับที่fooชี้ไป
สับสนนี้เราเพราะเราคาดว่าการเขียนที่delete objถูกลบวัตถุที่ถูกชี้ไปในหน่วยความจำที่ไม่ได้เป็นเพียงตัวแปรobjobj
นี่เป็นเพราะ Garbage Collector ของจาวาสคริปต์ทำงานบนการรักษา / ปล่อยดังนั้นถ้าฉันไม่มีตัวแปรอื่น ๆ ที่ชี้ไปที่วัตถุมันจะถูกลบออกจากหน่วยความจำ?
(โดยวิธีการทดสอบของฉันเสร็จใน Safari 4)
var obj = { helloText: "Hello World!" }; var foo = obj; delete obj;วัตถุจะไม่ถูกลบตรวจสอบobjการใช้งาน delete: delete obj.helloTextแล้วตรวจสอบfoo now foo is an empty object
deleteไม่ได้มีไว้สำหรับการลบวัตถุใน javascript deleteใช้สำหรับลบคีย์วัตถุในกรณีของคุณvar obj = { helloText: "Hello World!" }; var foo = obj; delete obj;วัตถุจะไม่ถูกลบตรวจสอบobjถัดไปเรียกใช้delete obj.helloTextแล้วคุณจะเห็นว่าfooตอนนี้ชี้ไปที่ว่างเปล่า วัตถุ "" "