2012-04-03 3 views
0

시도했지만 delete가 작동하지 않습니다.자바 스크립트로 전체 개체를 삭제하는 방법은 무엇입니까?

var x = {"y":42,"z":{"a":1,"b":[1,2,3]}}; 

alert(x.y); 
delete x; 

alert(x.y); // still shows '42' 

전체 개체 크로스 브라우저를 삭제하는 방법은 무엇입니까?

편집 : x = null

+0

브라우저가 작동하지 않는다는 것을 언급하는 것이 좋습니다 ... – ThiefMaster

+1

x = null이 작동하지 않는다는 것을 의미합니까? x.y에 액세스하는 것을 언급하는 경우 x에 null을 할당 한 후 x.y가 가장 확실하게 실패합니다. 메모리를 회수하는 것을 말하는 경우 x에 할당 된 객체는 가비지 콜렉션에 의해 정리됩니다 (다른 참조가없는 경우). – Matt

답변

3

삭제 연산자 만 사용하여 암시 적으로 선언 된 변수는 삭제할 수 있지만 var로 선언 된 변수는 삭제할 수 없습니다. x = null 또는 x = undefined로 설정할 수 있습니다.

3

당신은 변수 또는 함수를 삭제할 수 없습니다 작동하지 않습니다. 객체의 속성 만. 값을 지우려면

x = null; 

을 할당하면됩니다.

UPDATE : 설명에 대한 기능 : 당신이 윈도우 속성으로 전역 함수를 선언하는 경우

>> function f1() {console.log("aa");} 
>> f1(); 
aa 
>> delete f1; 
false 
>> f1(); 
aa 

을하지만, 당신이 그것을 삭제할 수 있습니다

>> f1 = f1() {console.log("aa");} 
>> delete window.f1; 
true 

을 같은 변수입니다 :

>> a = "x"; 
>> console.log(a); 
x 
>> delete window.a; 
true 
>> console.log(a); 
ReferenceError: a is not defined 

but :

>> var a = "x"; 
>> console.log(a); 
x 
>> delete a; 
false 
>> console.log(a); 
x 
+0

기능과 관련하여 사실이 아닙니다. 아래 @Spudley에 대한 내 의견을 참조하십시오. – Matt

+0

함수가 객체의 멤버 인 경우 함수를 삭제할 수 있습니다. 그러나 전역 적으로 정의 된 함수는 제거 할 수 없습니다. –

+0

세계적으로 정의 된 것은 무엇을 의미합니까? 기본적으로 전역 변수는 '창'범위 체인 아래에 있습니다. Chrome 콘솔'func1 = function() {}'을 실행 한 다음 'delete window.func1'을 실행 해보십시오. 성공적으로 삭제합니다 – Matt

2

자바의 전역 네임 스페이스에서 개체를 삭제할 수 없습니다.

개체는 x 안에 있지만, x 개체는 없습니다.

+0

Chrome 콘솔에서 'window.func1 = function() {}','delete window.func1'을 할 수 있습니다. 나는 또한'func2 = function() {}'다음에 삭제를 할 수있다. 그러나, 나는'function func3() {}'을 할 수 없다. delete on을 호출하면 false가 반환되고 함수는 남아 있습니다. – Matt

3

JavaScript에서 객체를 삭제하지 않아도됩니다. 객체에 대한 모든 참조가 제거 된 후 해당 객체는 가비지 수집됩니다. 참조를 제거하려면 사용

x = null; 
1

x = null; 또는 x = undefined;보십시오.

관련 문제