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 키워드로 배열의 값은 정의되지 않았지만 배열원소는 유지되므로 블록은 실행된다