Delete 연산자

delete 연산자는 오퍼랜드에 지정한 변수나 배열 요소, 객체의 프로퍼티를 파기한다. 삭제에 성공했을 경우에 delete 연산자는 true를, 실패한 경우에는 false를 되돌린다. 구체적인 예를 보도록 하자.

							// 배열
							var ary = ['javascript', 'ajax', 'asp.net'];
							$.print("1. "+ary);
							$.print("2. "+delete ary[0]);
							$.print("3. "+ary); // (1)

							// Object
							var obj = {x:1, y:2};
							$.print("4. "+obj);
							$.print("5. "+delete obj.x);
							$.print("6. "+obj); 
							$.print("7. "+obj.x);

							// Object 2
							var obj2 = {x:obj, y:2}
							$.print("8. "+obj2);
							$.print("9. "+delete obj2);
							$.print("10. "+"참조대상 obj는"+obj);// (2)

							// 명시적으로 선언된 변수 - 삭제되지 않는다.
							var data1 = 1;
							$.print("11. "+delete data1);
							$.print("12. "+data1);

							// var 연산자 없이 변수 선언된 경우.
							data2 = 10;
							$.print("13. "+delete data2); // true
							$.print("14. "+data2); // error (data2는 존재하지 않는다.) Uncaught ReferenceError: data2 is not defined 	
						

위 결과로부터 몇 가지 중요한 것을 알게 되었다.

  1. 1. 배열 요소를 삭제한 경우는 해당하는 요소가 삭제되기만 할 뿐 뒤의 요소가 앞으로 옮겨지는 것은 아니다(인덱스 번호는 변하지 않는다).
  2. 2. 프로퍼티를 삭제한 경우도 프로퍼티 그 자체가 삭제될 뿐 프로퍼티가 참조하는 객체가 삭제되는 것은 아니다.
  3. 3. 명시적으로 선언된 변수를 삭제할 수 없다.

또한 내장형 객체나 클라이언트 사이드 JavaScript 표준 객체(나중에 서술)에 포함된 멤버 중에는 delete 연산자로 삭제할 수 없는 프로퍼티도 있다. 이러한 제한(규제)도 확실히 이해해 두자.