JavaScript의 삭제 연산자 자세히 알아보기
언급하신 것처럼 JavaScript의 삭제 연산자는 혼란을 초래할 수 있습니다. 제공한 코드 조각을 살펴보겠습니다.
var obj = { helloText: "Hello World!" }; var foo = obj; delete obj;
이 코드를 실행한 후 obj를 삭제하려고 시도했기 때문에 obj와 foo가 모두 null일 것으로 예상할 수 있습니다. 그러나 이는 사실이 아니다. obj는 null이 되지만 foo는 여전히 obj가 가리키는 동일한 객체를 참조합니다.
객체 참조 이해
이 동작을 이해하는 열쇠는 JavaScript의 객체 참조 시스템에 있습니다. . JavaScript 객체는 참조 유형입니다. 즉, 실제 데이터가 아닌 메모리 주소를 보유합니다. 위의 예에서 obj와 foo는 메모리의 동일한 주소, 즉 "helloText" 속성을 포함하는 객체를 가리키는 두 개의 다른 변수입니다.
가비지 수집의 역할
JavaScript는 참조되지 않은 객체를 메모리에서 자동으로 제거하는 가비지 수집 메커니즘을 사용합니다. 그렇다면 delete obj를 사용해도 객체가 삭제되지 않는 이유는 무엇일까요?
삭제 연산자의 동작
JavaScript의 삭제 연산자는 실제로 객체 자체를 삭제하지 않습니다. 대신 해당 항목에 대한 참조만 삭제합니다. 객체 자체를 삭제하면 foo와 같은 다른 참조가 존재하지 않는 위치를 가리키게 되어 오류가 발생하기 때문입니다.
가비지 수집에 대한 의미
이후 delete는 단지 객체에 대한 참조를 제거할 뿐이며, 가비지 수집기는 객체를 삭제해야 하는 시기를 결정합니다. 코드에 객체에 대한 다른 참조가 없으면 가비지 수집 대상이 되어 메모리에서 제거됩니다.
모범 사례
삭제 연산자를 사용하는 방법은 다음과 같습니다. 성능 향상이 보장되지 않고 코드 디버깅을 더 어렵게 만들 수 있으므로 일반적으로 권장되지 않습니다. 그러나 이를 사용하면 더 이상 필요하지 않은 개체에 대한 참조를 명시적으로 제거하여 가비지 수집기의 정리 프로세스를 지원할 수 있습니다.
위 내용은 왜 `delete obj`가 JavaScript에서 `foo`도 삭제하지 않습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!