2012-07-02 5 views
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; 

답변

2

은 내가 delete - 연산자가 당신을 위해 무엇을 찾고 있습니다 생각합니다. 반드시 OP가 원하는 것은 아닙니다.
+1

주 (따라서 반드시 모든 * 한 * 참조를 제거) : – delnan

+0

@ 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가 정의되지 않았습니다. ' 부모 속성을 삭제하면 모든 자식이 가비지 수집 대상이됩니다. 모든 자식이 도달 할 수 없기 때문입니다. 동의 하시겠습니까? 감사합니다 –

+0

다음을 확인하십시오 : http://perfectionkills.com/understanding-delete/#comment-57399 -이 기사는 https://developer.mozilla.org/en-US/docs/ 하단에 인용되어 있습니다. JavaScript/Reference/Operators/delete - 대신 null을 사용해야합니다. –

관련 문제