Tôi hơi bối rối với delete
toá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, obj
là null
, nhưng foo
vẫ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 obj
sử dụng xóa: delete obj.helloText
và sau đó kiểm trafoo now foo is an empty object
delete
khô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.helloText
và bạn có thể thấy rằng foo
bây giờ chỉ vào một khoảng trống đối tượng. "" "