인덱스 값으로 접근할 수 있는 순서 있는 데이터들의 컬렉션이다.
배열(Array)
배열-같은 구조(TypedArray)
**객체(array)**는 이름(name)과 인덱스로 참조할 수 있는 값들의 순서 있는 리스트다.
자바스크립트는 명시적인 배열 데이터 타입을 가지지 않지만, 미리 정의된 Array 객체를 사용할 수 있다.
배열을 요소들로 초기화하는 방법은 다음과 같다.
Array 생성자 함수
Array 함수
배열 리터럴 혹은 배열 이니셜라이저(array initializer)
Array.of() static 메서드(ES2015)
/* Array 생성자 함수 */
let arr = new Array ( 요쇼1 , 요소2 , ...) ;
/* Array 함수 */
let arr = Array ( 요쇼1 , 요소2 , ...) ;
/* 배열 이니셜라이저 */
let arr = [ 요쇼1 , 요소2 , ...] ;
/* Array.of 메서드 */
let arr = Array . of ( 요소1 , 요소2 , ...) ;
요소를 가지진 않지만 길이가 0이 아닌 배열을 만드는 방법은 다음과 같다.
/* Array 생성자 함수 */
let arr = new Array ( 길이 ) ;
/* Array 함수 */
let arr = Array ( 길이 ) ;
/* 배열 이니셜라이저 */
let arr = [ ] ;
arr . length = 길이 ;
요소를 하나 가진 배열로 초기화하고 싶다면 배열 리터럴을 사용해야한다.
// 길이가 3인 배열 생성
let a = new Array ( 3 ) ;
// 요소가 3인 배열 생성
let a = [ 3 ] ;
13.1.2 배열 요소와 배열 프로퍼티에 접근하기
[]과 .로 배열의 프로퍼티에 접근할 수도 있다.
let arr = new Array ( 3 ) ;
arr [ 'length' ] ; // 3
arr . length ; // 3
13.1.3 배열 요소와 배열 프로퍼티 추가하기
원하는 인덱스에 값을 할당하여 요소를 추가할 수 있다.
let arr = [ ]
arr [ 0 ] = 'element' ;
let arr = [ ]
arr [ 2.3 ] = 'property'
arr . length ; // 0
arr . hasOwnProperty ( 2.3 ) ; // true
구현 단계에서 자바스크립트의 배열은 요소를 스탠다드 객체 프로퍼티로 저장하며, 배열 인덱스는 프로퍼티의 이름이 된다.
인덱스는 0부터 시작하므로 배열의 길이는 배열의 마지막 인덱스에 1를 더한 것과 같다.
let arr = [ ]
arr [ 30 ] = 'cat' ;
arr . length ; // 11
length 프로퍼티에 값을 할당할 수 있다.
let arr = [ 1 , 2 , 3 ] ;
arr . length = 2 ; // arr has [1, 2]
arr . length = 0 ; // arr has []
arr . length = 3 ; // arr has [ <3 empty items> ]
배열의 요소는 다음과 같은 방법으로 반복할 수 있다.
let arr = [ 1 , 2 , 3 ] ;
for ( let i = 0 ; i < arr . length ; i ++ ) {
console . log ( arr [ i ] ) ;
}
arr . forEach ( num => console . log ( num ) ; ) ;
배열은 요소로 배열을 가질 수 있어, 다차원 배열을 만들 수 있다.
let arr = [ ]
for ( let i = 0 ; i < 3 ; i ++ ) {
for ( let j = 0 ; j < 3 ; j ++ ) {
arr [ i ] [ j ] = i * j ;
}
}
Function.prototype.call() 메서드를 사용한다.
가령 arguments 객체는 length 프로퍼티는 가지나 forEach 메서드는 가지지 않는다. 배열로 변환해서 사용하도록 한다.
Array . prototype . forEach . call ( arguments , ( item ) => console . log ( item ) ) ;
Array . prototype . forEach . call ( 'a string' , ( chr ) => console . log ( chr ) ) ;
자바스크립트의 typed array는 배열과 비슷한 객체로, raw binary data에 접근할 수 있는 메커니즘을 제공한다.
Array 객체는 동적으로 수정할 수 있어, 어떤 자바스크립트 값이든 가질 수 있다.
웹 앱이 발전함에 따라, raw binary data를 조금 더 빠르고 쉽게 조작하기 위해 typed array를 사용한다.
13.2.1 버퍼와 뷰: typed array 아키텍처
유연성과 효율성을 극대화하기 위해, typed array는 구현을 **버퍼(buffer)**와 **뷰(view)**로 나눈다.
ArrayBuffer 객체로 구현된 버퍼는 데이터의 chunk를 나타내는 객체이다.
이렇다 할 만한 포맷(format)이 없다.
내용에 접근할 수 있는 메커니즘을 제공하지 않는다.
뷰는 버퍼에 담긴 메모리에 접근할 수 있게 한다.
뷰는 context 라는, offset으로 시작하는 데이터 타입과 몇 개의 요소를 제공하여 데이터를 실제 typed array로 변환한다.
ArrayBuffer는 제네릭한, 고정된 길이의 bianry data buffer를 표현하기 위해 사용하는 데이터 타입이다.
typed array view 혹은 buffer를 특정 포맷으로 나타내는 DataView를 만들어 buffer의 내용을 읽고 쓰는 데 사용한다.
typed arary view는 self descriptive name을 가지며 모든 보통의 numeric type(int8, Uint32 등)을 위한 view를 제공한다.