[JS] 배열(Array)

Jay Kim·2020년 5월 3일
0

JavaScript

목록 보기
9/10
post-custom-banner

관련 내용 학습 시, 지속적으로 추가

자바스크립트의 배열

자바스크립트 배열은 타입이 어떤 타입의 값(문자열, 숫자, 객체 심지어 다른 배열)이라도 담을 수 있다.
배열 안에 배열을 넣음으로써 다차원 배열을 만든다.

배열 크기는 미리 정하지 않아도 된다.

구멍 난 배열

"구멍 난sparse 배열"이란 "빈/빠진 슬롯이 있는 배열"을 말한다.

구멍 난 배열은 다음 두 가지 상황에서 발생한다.

delete 연산자를 사용하여 배열의 특정 슬롯 제거한 경우

배열의 값에 delete 연산자를 적용하면 슬롯slot을 제거 할 수 있다.
참고로, 마지막 원소까지 제거해도 length 프로퍼티 값까지 바뀌지는 않는다.

const arr = ['a', 'b'];

delete arr[0];
arr;  // [ <1 empty item>, 'b' ]
arr.length;  // 2

delete arr[1];
arr;  // [ <2 empty items> ]
arr.length;  // 2

② 특정 슬롯을 뛰어넘어 값을 대입한 경우

다음 코드는 두 번째 경우의 코드이다.

const arr = [];

arr[0] = 1;
// 'a[1]' 슬롯 건너뜀
arr[2] = 3;

arr[1];  // undefined
arr.length;  // 3

a[1] 슬롯 값은 당연히 undefined가 될 것 같지만,
명시적으로 a[1] = undefined를 대입한 것과 똑같지는 않다.

배열도 객체처럼 사용할 수 있다

알다시피, 배열 인덱스는 숫자이지만,
배열 자체도 하나의 객체이기 때문에 키/프로퍼티 문자열을 추가할 수 있다.
하지만, 배열의 length가 증가하지는 않는다.

const arr = [];

arr[0] = 1;
arr["idx1"] = 2;

arr  // [ 1, idx1: 2 ]
arr["idx1"];  // 2
arr.idx1;  // 2

arr.length;  // 1 (?!)

하지만 키로 넣은 문자열 값이 표준 10진수 숫자로 타입이 바뀔 수 있다면,
마치 문자열 키가 아닌 숫자 인덱스를 사용한 것과 같은 결과
를 초래한다.

const arr = [];

arr[0] = 1;
arr["10"] = 10;

arr;  // [ 1, <9 empty items>, 10 ]
arr["0"];  // 1
arr["10"];  // 10

arr.length;  // 11

위처럼 배열에 문자열 타입의 키/프로퍼티를 두는 것이 가능은 하나, 추천하지 않는다.


배열 관련 메서드

#삽입

push : 요소를 배열 마지막에 추가
ex) array.push(017)

unshift : 요소를 배열 처음에 추가
ex) array.unshifht(456)

#삭제

pop : 배열 마지막 요소 제거
ex) array.pop()

shift : 배열 첫 번째 요소 제거
ex) array.,shift()

배열 관련 프로퍼티

#조회

length : 배열의 길이
ex) array.length


📚 참고 자료

  • 카일 심슨, 2017, 《You Don't Know JS: 타입과 문법, 스코프와 클로저》, 한빛미디어, p.37
profile
minuzai
post-custom-banner

0개의 댓글