배열 의 각 원소 에 접근 할 때 에 는 [ ] 연산자 를 사용 한다 . [ ] 연산자 의 좌측 에 는 배열 에 대한 참조 가 위치 하 여야 하 며 , [ 와 ] 사이 에 는 음수 가 아닌 정수 값 으로 평가 되 는 임의 의 표현식 이 위치 할 수 있 다 . 이 구문 은 배열 에서 원소 를 읽 거나 쓸 때 사용 할 수 있 다 . 다음 의 자바 스크립트 문장 들 은 모두 적법 한 표현 이 다 . value = a [ 0 ] ; a [ 1 ] = 3 . 14 ; i = 2 ; a [ i ] = 3 ; a [ i + 1 ] = " hello "; a [ a [ i ] ] = a [ 0 ] ; 배열 의 인덱스 가 1 번 부터 시작 하 는 프로그래밍 언어 들 도 있 으나 자바 스크립트 , C , C ++, 자바 의 배열 은 0 번 인덱스 부터 첫 번 째 원소 가 시작 한다 . 이미 앞 에서 살펴본 바 와 같이 [ ] 연산자 는 객체 의 이름 붙 은 프로 퍼티 에 접근 하 려 할 때 에 도 사용 할 수 있 다 . my [ ' salary '] *= 2 ; 또한 배열 은 객체 의 특별 한 종류 이 기 때문 에 또는 [ ] 구문 을 사용 하 여 배열 안 에 숫자 가 아닌 이름 의 객체 프로 퍼티 를 정의 하 고 접근 할 수 있 다 . 배열 의 인덱스 에 는 반 드이 0 보다 크 거나 같 고 232 - 1 보다 작 은 정수 를 사용 해야 만 한다 . 만약 너무 큰 수 나 음 의 정수 , 부동소수점 값 , 불 리언 값 과 객체 같 은 다른 값 을 인덱스 로 사용 하 려면 자바 스크립트 는 이 를 문자열 로 변환 하 고 이 문자열 을 객체 의 프로 퍼티 이름 으로 간주 한다 . 즉 , 이것 은 더 이상 배열 의 인덱스 가 아니 다 . 예 를 들 어 다음 의 코드 는 "- 1 . 23 " 이 라는 이름 의 프로 퍼티 를 생성 하 며 , 배열 의 원소 를 정의 하 는 것 이 아님 을 주의 한다 . a [ - 1 . 23 ] = true ; 1 . 배열 에 새로운 원소 추가 하 기 C 나 자바 같 은 프로그램 언어 에서 배열 이 가질 수 있 는 원소 의 개수 는 배열 이 생성 될 당시 에 지정 되 고 그 개수 가 변하 지 않 는다 . 그러나 자바 스크립트 는 다르 다 . 배열 은 임의 개수 의 원소 를 가질 수 있 으며 원소 의 개수 는 언제 든 변경 할 수 있 다 . 배열 에 새로운 원소 를 추가 하 려면 그 값 을 할당 하 기 만 하 면 된다 . a [ 10 ] = 10 ; 자바 스크립트 배열 의 인덱스 는 연속 적 이 지 않 아도 된다 . 이것 은 배열 의 인덱스 를 반드시 연속 된 범위 의 숫자 안 에서 고르 지 않 아도 됨 을 의미 한다 . 자바 스크립트 는 배열 에 실제로 저장 된 원소 들 에 대해서 만 메모리 를 할당 하 도록 구현 할 수 있 다 . 즉 , 다음 과 같 은 코드 를 실행 할 때 에 자바 스크립트 인터프리터 는 0 번 인덱스 와 10 , 000 번 인덱스 를 위해서 만 메모리 를 할당 하 며 그 사이 에 있 는 9 , 999 개 의 인덱스 에 대해서 는 메모리 를 할당 하 지 않 는다 . a [ 0 ] = 1 ; a [ 10000 ] = " this is element 10 , 000 "; 또한 배열 원소 는 객체 에 도 추가 될 수 있 다 . var c = new Circle ( 1 , 2 , 3 ) ; c [ 0 ] = " this is an array element of an object ! "; / / c [ 0 ] 은 객체 의 배열 원소 다 . 이 예 는 단지 객체 에 " 0 " 이 라는 이름 의 프로 퍼티 를 추가 할 뿐 이 다 . 객체 에 배열 원소 를 추가 한다고 해서 객체 가 배열 이 되 지 는 않 는다 . 2 . 배열 원소 삭제 하 기 delete 연산자 를 사용 하 면 배열 원소 의 값 을 undefined 값 으로 설정 할 수 있 다 . 하지만 이렇게 하 면 배열 원소 그 자체 는 사라지 지 않 고 여전히 존재 한다 . 배열 원소 를 배열 에서 완전히 삭제 하 고 삭제 한 배열 원소 의 뒤쪽 에 위치 한 원소 들 을 앞쪽 ( tolower indexes ) 으로 옮겨서 저장 하 려면 배열 메 서 드 를 사용 해야 만 한다 . Array . shift ( ) 메 서 드 는 배열 의 첫 번 째 원소 를 삭제 하 고 Array . pop ( ) 메 서 드 는 배열 의 마지막 원소 를 삭제 하 며 , Array . splice ( ) 메 서 드 는 연속 된 범위 안 의 원소 들 을 일괄 적 으로 삭제 한다 . 이 함수 들 은 이 장 의 후반부 와 3 부 에서 자세히 설명 한다 . 3 . 배열 의 길 이 Array ( ) 생성자 혹은 배열 리터럴 등 의 방법 을 사용 하 여 생성 된 모든 배열 에 는 이 비열 에 있 는 원소 의 수 를 알려 주 기 위한 length 라는 이름 의 특별 한 프로 퍼티 가 있 다 . 좀 더 정확히 말 하 자면 배열 은 정의 되 지 않 은 원소 도 가질 수 있 기 때문 에 , length 프로 퍼티 는 배열 안 에서 가장 큰 인덱스 값 보다 언제나 하나 더 큰 값 이 다 . 일반 적 인 객체 프로 퍼티 와 달리 , length 프로 퍼티 는 배열 에 새로운 요소 가 추가 될 때 마다 위 의 규칙 을 만족 하 기 위해 자동 으로 갱신 된다 . 예 를 들 면 다음 과 같 다 . var a = new Arra ( ) ; / / a . length == 0 ( 아무런 원소 도 정의 되 지 않 았 다 ) a = new Array ( 10 ) ; / / a . legnth == 10 ( 빈 원소 가 0 부터 9 까지 정의 된다 ) a = new Array ( 1 , 2 , 3 ) ; / / a . length == 3 ( 원소 가 0 부터 2 까지 정의 된다 ) a = [ 4 , 5 ] ; / / a . length == 2 ( 원소 가 0 , 1 번 이 정의 된다 ) a [ 5 ] = - 1 ; / / a . length == 3 ( 원소 0 , 1 , 5 번 이 정의 된다 ) a [ 49 ] = 0 ; / / a . length == 3 ( 원소 0 , 1 , 5 , 49 번 이 정의 된다 ) 앞 에서 배열 원소 의 인덱스 는 반드시 232 - 1 보다 작 은 값 이 어야 한다고 설명 했 다 . 따라서 length 프로 퍼티 가 가질 수 있 는 가장 큰 값 은 232 - 1 이 다 . 4 . 배열 순회 하 기 length 프로 퍼티 의 가장 일반 적 인 용도 는 아마도 배열 의 모든 원소 를 순회 하 는 작업 일 것 이 다 . 예 를 들 면 다음 과 같 다 . var fruits = [ " mango ", " banana ", " cherry ", " pear "]; for ( var i = 0 ; i < fruits . length ; i ++) alert ! ( fruits [ i ] ) ; 물론 , 이 예 는 배열 의 원소 들 이 배열 안 의 0 번 인덱스 에서 시작 하 여 연속 적 으로 나열 되 어 있 다고 가정 한다 . 이 가정 을 만족 하 지 않 는다면 다음 과 같이 배열 원소 를 사용 하 기 전 에 그 배열 원소 가 정의 되 어 있 는지 검사 해야 만 한다 . for ( var i = 0 ; i < fruits . length ; i ++) if ( fruits [ i ] ) alert ! ( fruits [ i ] ) ; 이 와 같 은 루프 구문 은 Array ( ) 생성자 로 생성 된 배열 의 원소 를 초기 화 하 는 데 에 도 사용 할 수 있 다 . var lookup _ table = new Array ( 1024 ) ; for ( var i = 0 ; i < lookup _ table . length ; i ++) lookup _ table [ i ] = i * 512 ; 5 . 배열 크기 조절 하 기 배열 의 length 프로 퍼티 는 읽 고 쓸 수 있 는 값 이 다 . length 프로 퍼티 를 현재 의 값 보다 작 게 설정 하 면 배열 은 그 새로운 길이 로 축소 된다 . 즉 새롭 게 설정 된 배열 의 길이 를 벗어나 는 위치 의 원소 들 은 버려 지 고 그 원소 들 의 값 은 전부 잃어버린다 . length 프로 퍼티 를 현재 의 값 보다 크 게 설정 하 면 배열 의 끝 부분 에 정의 되 지 않 은 원소 들 이 추가 되 면서 배열 이 새로운 길이 로 늘어난다 . 객체 는 배열 원소 를 할당 받 을 수 있 지만 length 프로 퍼티 는 없 음 을 유의 하 라 . 지금 까지 설명 한 length 프로 퍼티 의 특별 한 행동 양식 이야말로 배열 이 가진 가장 중요 한 특징 이 라 할 수 있 다 . 객체 와 배열 을 구분 하 는 또 다른 중요 한 특징 인 배열 의 다양 한 메 서 드 는 7 . 7 절 에서 설명 한다 . 6 . 다 차원 배열 자바 스크립트 는 진정한 의미 에서 의 다 차원 배열 을 지원 하 지 는 않 는다 . 그러나 배열 의 배열 을 사용 하 여 효과 적 으로 다 차원 배열 을 흉내 낼 수 있 다 . 배열 의 배열 에서 원소 에 접근 하 기 위해서 는 단순히 [ ] 연산자 를 두 번 사용 하 면 된다 . 예 를 들 어 , matrix 가 배열 이 라고 가정 하 자 . matrix [ x ] 의 모든 배열 원소 는 숫자 배열 이 다 . 이 숫자 배열 의 특정 숫자 에 접근 하 기 위해서 는 matrix [ x ] [ y ] 와 같이 쓸 수 있 다 . 예 를 들 어 구구 단표 를 작성 하 기 위하 여 2 차원 배열 을 사용 하 는 방법 은 다음 과 같 다 . / / 다 차원 배열 을 생성 한다 . var table = new Array ( 10 ) ; / / 구구 단표 의 열 개 행 for ( var i = 0 ; i < table . length ; i ++) { table [ i ] = new Array ( 10 ) ; / / 각 행 에 는 열 개 의 열 이 있 다 . }// 배열 을 초기 화 한다 . for ( var row = 0 ; row < table . length ; row ++) { for ( col = 0 ; col < table [ row ] . length ; col ++) { table [ row ] [ col ] = row * col ;}}// 5 * 7 을 계산 하 기 위하 여 구구 단표 를 사용 한다 . var product = table [ 5 ] [ 7 ] ; / / 35