배열
배열이 가지고 있는 값을 '요소'라고 부름
배열의 요소는 자산의 위치를 나타내는 인덱스(index)를 갖는다.
자바스크립트에서 배열이라는 타입은 존재하지 않는다. 배열은 '객체' 타입이다.
자바스크립트의 배열은 일반적인 의미에 배열이 아니다.
자바스크립트의 배열은 일반적인 배열의 동작을 흉내 낸 특수한 객체다.
자바스크립트 배열은 인덱스로 배열 요소에 접근하는 경우에는 일반적인 배열보다 느리지만 요소를 삽입 또는 삭제하는 경우에는
일반적인 배열보다 빠르다.
자바스크립트 배열은 인덱스로 접근하는 경우의 성능 대신 배열 요소를 삽입 또는 삭제하는 경우의 성능을 선택한 것이다.
자바스크트를 만들때 좀더 효율적인 방법으로 선택을 해서 만들어 냈다는 것이 개발자의 입장에서 많이 생각했던 것 같다.
그만큼 많은 문재점도 있지만 이러한 점들 덕분에 다른 언어의 비해 쓰기 편한부분도 있는 것 같다?
length 프로퍼티
length프로퍼티는 요소의 개수 배열의 길이를 나타내는 0 이상의 정수를 값으로 갖는다.
이처럼 배열의 요소가 연속적으로 위치하지 않고 일부가 비어있는 배열을 희소 배열이라고 한다.
자바스크립트는 희소 배열을 문법적으로 허용한다.
일반적인 배열의 length는 배열의 요소의 개수, 즉 배열의 길이와 언제난 일치한다. 하지만 희소배열은
length와 배열의 요소의 개수가 일치하지 않는다. 희소배열의 length는 회소 배열의 실제 요소 개수보다 언제나 크다.
자바스크립트는 문법적으로 희소배열을 허용하지만 희소 배열은 사용하지 않는 것이 좋다.
배열에는 같은 타입의 요소를 연속적으로 위치시키는 것이 최선이다.
배열 생성
객체의 프로퍼티를 동적으로 추가할 수 있는 것처럼 배열애도 요소를 동적으로 추가할 수 있다.
존재하지 않는 인덱스를 사용해 값을 사용하면 새로운 요소가 추가된다.
인덱스의 요소의 위치를 나타내므로 반드시 0 이상의 정수를 사용해야 한다.
만약 정수 이외의 값을 인덱스처럼 사용하면 요소가 생성되는 것이 아니라 프로퍼티가 생성된다.
배열의 요소의 삭제로는 delete연산자를 사용할 수 있다. 하지만 delete연산자는 객체의 프로퍼티를 삭제한다.
해당배열은 희소배열이 되며, length 프로퍼티 값은 변하지 않는다. delete연산자는 사용하지 않는 것이 좋다.
Array.prototype.splice메소드를 사용해서 배열의 요소를 삭제한다.
책 : Modern 자바스크립트 deep dive