Java 언어와 달리 JavaScript의 배열에는 세 가지 특징이 있습니다.
1. 유형이 없습니다. 배열의 구성원은 모든 유형이 될 수 있으며, 동일한 배열이 다양한 유형의 여러 구성원으로 구성될 수도 있습니다.
2. 길이는 가변적입니다. 배열의 길이는 동적으로 변경될 수 있으므로 JavaScript의 배열 액세스에는 범위를 벗어난 문제가 없습니다.
3. 불연속성. 배열에서 멤버의 위치는 연속적(0, 1, 2, 3...)이거나 불연속적일 수 있습니다. 모든 배열에는 길이라는 속성이 있습니다. 배열 구성원이 연속적인 경우 길이 값은 배열 구성원의 수와 일치하며, 배열 구성원이 불연속적인 경우 길이 값은 배열 구성원의 수보다 큽니다. 연속 배열과 비교하여 불연속 배열의 읽기 및 쓰기 성능은 더 나쁩니다.
실험:
위의 예에서 볼 수 있듯이 불연속 배열의 경우 JavaScript는 누락된 멤버에 액세스할 때 정의되지 않은 값을 반환합니다. 배열이 연속적이지만 해당 멤버 중 하나가 정의되지 않은 경우 배열에 액세스한 결과는 동일합니다.
배열은 불연속적이고 멤버가 누락되어 있으며, 배열은 연속되어 있지만 정의되지 않은 멤버가 있습니다. 두 경우 모두 배열 내용에 액세스한 결과는 동일합니다. 하지만 둘 사이에는 여전히 미묘한 차이점이 있는데, 주로 배열 키에 대한 액세스입니다.
이 두 경우에서 콘텐츠에 액세스하여 얻은 결과는 동일하지만 내부 메커니즘은 완전히 다르다는 것을 알 수 있습니다. 배열이 불연속적이면 특정 멤버가 누락되어 해당 멤버에 액세스하면 JavaScript가 정의되지 않음을 반환합니다. ; 배열이 연속인 경우 모든 멤버가 존재하지만 일부 멤버의 값은 특별하며 정의되지 않습니다.
위의 예에서 볼 수 있듯이 JavaScript의 배열은 본질적으로 숫자를 키로 갖는 객체일 뿐이며 일반적인 키-값 쌍과 다르지 않습니다. 실제로 배열에 대한 읽기 및 쓰기 작업을 수행할 때 JavaScript는 매개변수를 양의 정수로 변환하려고 시도합니다. 변환이 성공하면 배열 작업이 수행됩니다(배열의 길이 속성이 자동으로 업데이트됩니다). 실패하면 매개변수는 문자열 이후에 일반 객체에 대한 읽기 및 쓰기 작업이 수행됩니다. 물론 자바스크립트 인터프리터 구현에서는 숫자를 키로 사용하는 배열의 기능에 대한 성능 최적화가 많이 이루어졌기 때문에 실제 사용에서는 객체의 키가 모두 숫자라면 직접 사용하면 된다. 배열 객체는 더 나은 결과를 얻을 것입니다.
배열을 정의하는 동안 JavaScript는 중복된 쉼표를 허용하고 두 쉼표 사이에 배열 구성원이 누락되는 것을 허용합니다.
배열 생성을 위해 JavaScript는 네 가지 방법을 지원합니다:
1. 리터럴(예: 위 예의 대괄호 표현식)을 사용하여 배열 객체를 직접 만듭니다.
2. 매개변수를 전달하지 않고 Array() 생성자를 사용합니다. 이 경우에는 []와 동일한 효과를 갖는 빈 배열이 생성됩니다.
3. Array() 생성자를 사용하고 양의 정수를 배열 길이로 전달합니다. 이 경우 JavaScript는 이 배열을 저장하기 위해 해당 메모리 공간을 예약합니다. 현재 배열의 키가 정의되지 않았다는 점, 즉 배열에 멤버가 없다는 점은 주목할 가치가 있습니다. 효과는 [,,,,]와 같습니다
4. Array() 생성자를 사용하고 배열 멤버를 전달합니다.
실험:
var m = new Array(42, 33, 99, "test", {k:99});
console.log(m);//[42, 33, 99, "test", 개체 {k=99}]