Tôi hơi bối rối với deletetoán tử của JavaScript . Lấy đoạn mã sau:
var obj = {
helloText: "Hello World!"
};
var foo = obj;
delete obj;
Sau khi đoạn mã này được thực thi, objlà null, nhưng foovẫn đề cập đến một đối tượng chính xác như thế nào obj. Tôi đoán đối tượng này là cùng một đối tượng foođã chỉ.
Điều này làm tôi bối rối, bởi vì tôi dự đoán rằng việc viết delete objđã xóa đối tượng objđược trỏ đến trong bộ nhớ, không chỉ là biến obj.
Đây có phải là do Trình thu gom rác của JavaScript đang hoạt động trên cơ sở giữ lại / phát hành, do đó nếu tôi không có bất kỳ biến nào khác trỏ đến đối tượng, nó sẽ bị xóa khỏi bộ nhớ?
(Nhân tiện, thử nghiệm của tôi đã được thực hiện trong Safari 4.)
var obj = { helloText: "Hello World!" }; var foo = obj; delete obj;đối tượng của bạn không bị xóa kiểm tra objsử dụng xóa: delete obj.helloTextvà sau đó kiểm trafoo now foo is an empty object
deletekhông phải để xóa các đối tượng trong javascript. deleteĐược sử dụng để xóa khóa đối tượng. Trong trường hợp của bạn var obj = { helloText: "Hello World!" }; var foo = obj; delete obj;, đối tượng không bị xóa. Hãy kiểm tra obj. Tiếp theo, hãy chạy delete obj.helloTextvà bạn có thể thấy rằng foobây giờ chỉ vào một khoảng trống đối tượng. "" "