WEB2.0/ExtJS

[javascript] Delete 연산자 - 배열의 원소 지우기

시반 2008. 12. 1. 11:56

javascript에서의 delete는 개체(object), 개체의 속성(property),

배열의 특정 인덱스에 있는 원소(element)를 지우는 연산자이며. 문법은 다음과 같다

delete objectName
delete objectName.property
delete objectName[index]
delete property // with 문장 안에서만 유효

 

objectName은 개체 이름이고, property는 개체에 존재하는 속성이고, index는 배열의 원소 위치를 나타내는 정수.

네 번째 형식은 개체의 속성을 지우는 코드인데, with 문장 안에서만 사용할 수 있다.

암시적으로 선언된 변수를 지울 때는 delete 연산자를 사용할 수 있지만

단 var 문장을 이용해서 선언된 변수는 지울 수 없다.

delete 연산자 실행이 성공하면, 속성이나 원소가 undefined로 설정되며.

delete 연산자는 실행이 가능하면 true를 반환하고, 불가능하면 false를 반환하게 된다.

x=42
var y= 43
myobj=new Number()
myobj.h=4      // h라는 속성을 만듭니다
delete x       // returns true (암시적으로 선언된 변수는 지울 수 있습니다)
delete y       // returns false (var로 선언한 변수는 지울 수 없습니다)
delete Math.PI // returns false (미리 정의된 속성은 지울 수 없습니다)
delete myobj.h // returns true (사용자 정의 속성은 지울 수 있습니다)
delete myobj   // returns true (암시적으로 선언되었으므로 지울 수 있습니다)

 

배열의 원소를 지우기


머 당연하지만 배열의 원소를 지워도, 배열의 길이에는 변화가 없게 된다.

즉 delete로 지우는 경우 원소는 더이상 배열에 존재하지 않게 된다(undefined).

하지만 delete와 배열원소에 undefined를 할당한 경우 조금 의미가 다르다.

 

먼저 아래 예제에서 trees[3]을 delete로 제거한 예제이다.

 

trees=new Array("redwood","bay","cedar","oak","maple")
delete trees[3]
if (3 in trees) {
   // 이 블록은 실행되지 않는다.

   alert(trees[3]);
}

즉 trees라는 배열에는 trees[3] 이라는 배열원소 자체가 삭제(undefined)되어 실행되지 않지만

단지 배열 원소가 존재하긴 하지만 정의되지 않은 값을 가지도록 하고 싶다면

delete 연산자 대신 undefined 키워드를 사용하면 된다.

 

다음은 trees[3]undefined 값을 할당하는 경우이다

 

trees=new Array("redwood","bay","cedar","oak","maple") trees[3]=undefined if (3 in trees) { // 이 블록은 실행된다. }

 

undefined 키워드로 배열의 값은 정의되지 않았지만 배열원소는 유지되므로 블록은 실행된다