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]
세부
delete
JavaScript에서는 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
는 비파괴 적이며 표시된 인덱스를 포함하는 새 배열을 start
to 에서 반환합니다 end
. 경우 end
IS는 배열의 마지막에 지정, 기본값을 떠났다. 경우 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
배열에서 마지막 요소를 제거하고 해당 요소를 반환합니다. 이 작업은 배열의 길이를 변경합니다.