delete연산자 오브젝트에서 속성을 제거하기 위해 사용된다.
const obj = { foo: "bar" }
delete obj.foo
obj.hasOwnProperty("foo") // false
배열의 경우 이것은 element를 제거하는 것과 다릅니다 . 어레이에서 사용하는 요소를 제거 Array#splice하거나 Array#pop. 예를 들면 다음과 같습니다.
arr // [0, 1, 2, 3, 4]
arr.splice(3,1); // 3
arr // [0, 1, 2, 4]
세부
deleteJavaScript에서는 C 및 C ++의 키워드와 다른 기능을합니다. 메모리를 직접 비우지 않습니다. 대신 유일한 목적은 객체에서 속성을 제거하는 것입니다.
배열의 경우 인덱스에 해당하는 속성을 삭제하면 희소 배열 (예 : "구멍"이있는 배열)이 생성됩니다. 대부분의 브라우저는 이러한 누락 된 배열 인덱스를 "비어 있음"으로 나타냅니다.
var array = [0, 1, 2, 3]
delete array[2] // [0, 1, empty, 3]
참고 delete재배치하지 않습니다 array[3]에 array[2].
JavaScript의 다른 내장 함수는 희소 배열을 다르게 처리합니다.
for...in 빈 인덱스를 완전히 건너 뜁니다.
전통적인 for루프는 undefined인덱스 값을 반환 합니다.
사용하는 모든 메소드 는 색인에서 값을 Symbol.iterator리턴 undefined합니다.
forEach, map그리고 reduce단순히 누락 된 인덱스를 건너 뜁니다.
따라서 delete연산자를 배열에서 요소를 제거하는 일반적인 사용 사례에 사용해서는 안됩니다. 배열 요소를 제거하고 메모리를 재 할당하기위한 전용의 방법이있다 : Array#splice()및 Array#pop.
배열 #splice (start [, deleteCount [, item1 [, item2 [, ...]]]])
Array#splice배열을 변경하고 제거 된 인덱스를 반환합니다. deleteCount요소는 index start에서 제거되고 index item1, item2... itemN에서 배열에 삽입됩니다 start. deleteCount생략 하면 startIndex의 요소가 배열 끝까지 제거됩니다.
let a = [0,1,2,3,4]
a.splice(2,2) // returns the removed elements [2,3]
// ...and `a` is now [0,1,4]
비슷한 이름 만 다른, 기능에도있다 Array.prototype: Array#slice.
배열 # 슬라이스 ([begin [, end]])
Array#slice는 비파괴 적이며 표시된 인덱스를 포함하는 새 배열을 startto 에서 반환합니다 end. 경우 endIS는 배열의 마지막에 지정, 기본값을 떠났다. 경우 end긍정적, 그것은 제로로부터 지정 비 포함 에서 중지하는 인덱스를. 경우 end네거티브 그것은, 그것은 배열의 끝에서 다시 계산하여 정차로 인덱스를 지정 (예. -1 최종 인덱스를 생략한다). 인 경우 end <= start결과는 빈 배열입니다.
let a = [0,1,2,3,4]
let slices = [
a.slice(0,2),
a.slice(2,2),
a.slice(2,3),
a.slice(2,5) ]
// a [0,1,2,3,4]
// slices[0] [0 1]- - -
// slices[1] - - - - -
// slices[2] - -[3]- -
// slices[3] - -[2 4 5]
배열 # 팝
Array#pop배열에서 마지막 요소를 제거하고 해당 요소를 반환합니다. 이 작업은 배열의 길이를 변경합니다.