4
다른 데이터 중에서 배열을 포함하는 Javascript에서 객체를 적절히 파괴하는 방법이 궁금합니다. 예를 들어자바 스크립트에서 개체를 파괴하는 방법?
(이 오브젝트의 초기 상태)
acme.models.nomination = {
recipients : [], // array will be added to later.
awardType: {}, // this object will be filled out later.
privacy: 'private',
...
};
애플리케이션 사용하면서 nomination.recipients 다른 데이터 요소와 함께 첨가 될 개체.
acme.models.nomination = {};
을하거나 더 나은 (또는 과잉)이다 : 그것은 충분히 완전한 개체를 지우려면 다음을 수행하는 것입니다 그것으로 완료되면
acme.models.nomination.privacy = undefined;
acme.models.nomination.awardType = {};
acme.models.nomination.recipients = {};
acme.models.nomination = {};
나는 전 문 것을 생각하고 (즉, acme.models.nomination = {}
)는 전체 내용에 도달 할 수 없으므로 가비지 수집에 효과적으로 적용되므로 충분합니다. 그러나 이것에 대해 다른 사람들의 의견을 듣고 싶습니다. BTW, 대답은 현대적인 브라우저 컨텍스트에서 제공 할 수 있습니다. 브라우저가 지난 1 월 1 일 이후라고 가정 해 봅시다. 메모리 관리가 과거에는 일관성이 없었습니다. 이 객체의 속성을 제거하는 것이
delete acme.models.nomination;
주 (따라서 반드시 모든 * 한 * 참조를 제거) : – delnan
@ micha149 다음 코드 스 니펫을 고려하십시오. ' var x = {}; x.y = {a : 1, b : function() {}}; 삭제 x.y; // x.y는 이제 정의되지 않았습니다 ' 이것은 a 속성과 b 속성이 가비지 컬렉션 => 모두 유효 함을 의미합니다. x.y 내에 요소 배열이 있다면 어떨까요? 다음 코드 스 니펫을 고려하십시오. ' var x = {}; x.y = {a : 1, b : function() {}, c : [1, 2, 3, 4, 5]}; 삭제 x.y; // x.y가 정의되지 않았습니다. ' 부모 속성을 삭제하면 모든 자식이 가비지 수집 대상이됩니다. 모든 자식이 도달 할 수 없기 때문입니다. 동의 하시겠습니까? 감사합니다 –
다음을 확인하십시오 : http://perfectionkills.com/understanding-delete/#comment-57399 -이 기사는 https://developer.mozilla.org/en-US/docs/ 하단에 인용되어 있습니다. JavaScript/Reference/Operators/delete - 대신 null을 사용해야합니다. –