일반적으로 숫자를 키로 값을 뽑을 수 있는 데이터 구조를 배열이라 하며, 배열의 키는 연속하는 숫자이므로 순서가 있는 값의 모음으로 볼수 있다.

var array = [ "item1", "item2", "item3", "item4" ];
array[1] = "item1";
array[2] = "item2";
array[3] = "item3";

위와 같은 일반적인 방법 이외에도 인덱스 대신 문자열을 이용하여 접근 가능하다.

var array = new Array(10);
array["value1"]
array["value2"]
array["value3"]

숫자 이외의 키는 대부분 문자열이지만 문자열에 한정되지 않고 임이의 타입인 키를 이용하여 키와 값의 모음을 다루는 데이터 구조를 연관 배열이라 한다.

연관배열을 맵이나 사전이라고 부르는 언어도 있으며 내부 구현에서는 해시 라고 부르는 언어도 있다. 이름만 다를 뿐 데이터 구조는 같으며 어떤 이름으로 쓰든 문제는 없다.

연관배열의 주된 용도는 키로 값을 뽑아내는 조작이다. 자바스크립트에서는 객체를 연관배열로 사용하는 것을 정석으로 하고 있으며, 객체를 연관배열로 사용하는 경우 객체 리터럴로 생성하는 것이 일반적이다.

유사배열객체(= 연관 배열)

자바스크립트에서는 length 프로퍼티를 가진 객체를 유사배열객체 라고 한다. 예로 일반 객체에 length 프로퍼티가 있다고 가정한다면 그 일반객체는 유사배열객체이며 이러한 유사배열 객체의 가장 큰 특징은 객체임에도 불구하고 자바스크립트의 표준 배열 메서드를 사용하는 것이 가능하다.

var arr = ['foo'];

// 배열 표준메서드인 push로 데이터 추가
arr.push('bar');
console.log(arr); // ['foo', 'bar'] 기록

var obj = {
	name : 'jaehee',
	length : 1
};

// obj는 일반 객체지만 length프로퍼티를 지정해 줌
// 똑같이 표준메서드인 push로 데이터 추가
obj.push('pub');
console.log(obj); 
// Uncaught TypeError: undefined is not a function => error 발생

위의 코드에서 length 프로퍼티를 지정한 유사배열객체인 obj는 당연히 배열이 아니기 때문에 배열 메서드인 push() 메서드를 사용할 수가 없기 때문에 에러가 발생한다. 하지만 일반 객체가 프로토타입과 apply() 메서드를 이용하면 객체지만 표준메서드를 사용하는 것이 가능하도록 하게 할수 있다.

var obj = {
	name : 'jaehee',
	length: 1
};

Array.prototype.push.apply(obj,['pub']);
console.log(obj);

이러한 유사 배열객체는 arguments 객체나 jQuery 객체가 이러한 유사배열 객체형태로 되어 있다.

객체의 프로퍼티에 접근하기 위해 사용되는 [] 연산자는 식별자(식별자는 프로그래머가 프로그램 상에 직접 코딩하여 넣기 때문에 정적이다) 대신, 프로그램 실행 시간에 동적으로 얼마든지 변경할 수 있는 문자열을 사용하여 프로퍼티의 이름을 표현할 수가 있다.

이러한 방식으로 객체를 사용할 때 이를 연관 배열(associative array)이라 한다.

연관 배열은 동적으로 임의의 값과 임의의 문자열을 연관지어 지정할 수 있는 자료구조이다.