Java 언어와 달리 JavaScript의 배열에는 세 가지 기능이 있습니다.
1. 유형 없음. 배열의 멤버는 모든 유형 일 수 있으며 동일한 배열은 여러 유형의 멤버로 구성 될 수도 있습니다.
2. 길이는 가변적입니다. 배열의 길이는 동적으로 변경 될 수 있으므로 JavaScript에서 배열 이외의 배열 액세스에 문제가 없습니다.
3. 불연속성. 배열에서 멤버의 위치는 연속적이거나 (0, 1, 2, 3…) 불연속 일 수 있습니다. 모든 배열에는 길이라는 속성이 있습니다. 배열 멤버가 연속적 일 때 길이 값은 배열 멤버 수와 일치합니다. 배열 멤버가 연속적이지 않으면 길이 값은 배열 멤버 수보다 큽니다. 연속 어레이와 비교할 때 불연속 어레이의 읽기 및 쓰기 성능은 더 나쁩니다.
실험:
코드 사본은 다음과 같습니다.
var o = [42, "샘플 텍스트", {x : 88}]; // javaScript 배열은 유형이 없습니다.
console.log (o); // [42, "샘플 텍스트", 개체 {x = 88}]
o [3] = 27; // javaScript 배열은 동적입니다.
Console.log (O); // [42, "샘플 텍스트", Object {x = 88}, 27]
o [5] = 99; // JavaScript 배열은 드물다.
Console.log (O); // [42, "샘플 텍스트", 개체 {x = 88}, 27, undefined, 99]
위의 예에서 볼 수 있듯이 불연속 어레이의 경우 누락 된 멤버에 액세스 할 때 JavaScript가 정의되지 않은 반환됩니다. 배열이 연속적이지만 멤버 중 하나가 정의되지 않은 경우 배열에 액세스 한 결과는 동일합니다.
코드 사본은 다음과 같습니다.
var a = [42, "샘플 텍스트", {x : 88}, 27, 정의되지 않은, 99];
Console.log (a); // [42, "샘플 텍스트", 객체 {x = 88}, 27, undefined, 99]
배열은 불연속적이고 부재가 누락되었으며, 이는 배열이 연속적이지만 정의되지 않은 멤버와 동일합니다. 두 경우 모두 배열 컨텐츠에 액세스 한 결과는 동일합니다. 그러나 둘 사이에는 여전히 미묘한 차이가 있으며 주로 배열 키에 액세스 할 때 나타납니다.
코드 사본은 다음과 같습니다.
Console.log (4 인 O); // false
Console.log (4 인치); // true
이 두 경우에서 컨텐츠에 액세스하여 얻은 결과는 동일하지만 내부 메커니즘은 완전히 다르다는 것을 알 수 있습니다. 배열이 불연속적이면 특정 멤버가 누락되므로 멤버에 액세스하면 JavaScript가 정의되지 않은 것을 반환합니다. 배열이 지속적이면 모든 구성원이 존재하지만 일부 구성원의 값은 비교적 특별하고 정의되지 않습니다.
위의 예에서, 우리는 또한 JavaScript의 배열의 본질이 키로 숫자를 가진 객체 일 뿐이며 일반적인 키 값과 객체 사이에는 차이가 없음을 알 수 있습니다. 실제로 배열을 읽고 쓸 때 JavaScript는 매개 변수를 양수 정수로 변환하려고합니다. 변환이 성공하면 배열 작업이 수행됩니다 (배열의 길이 속성을 자동으로 업데이트). 실패하면 매개 변수가 문자열로 변환 된 다음 일반 객체에 읽고 씁니다. 물론 JavaScript 통역사의 구현에서 숫자를 키로 사용하여 배열의 기능에 대한 많은 성능 최적화가 만들어집니다. 따라서 실제로 사용하면 객체의 키가 모든 숫자 인 경우 배열 객체를 직접 사용하면보다 효율적인 결과가 나타납니다.
배열을 정의하는 과정에서 JavaScript는 추가 쉼표가 나타날 수 있으며 두 쉼표 사이에 배열 멤버가 누락 될 수 있습니다.
코드 사본은 다음과 같습니다.
var x = [1,2,3,]; // Trailing Comma는 생략됩니다.
Console.log (x.length); // 3
var y = [1 ,, 3]; // 멤버를 놓칠 수 있습니다.
Console.log (y); // [1, 정의되지 않은, 3]
Console.log (1 인치); // false
Console.log (y.length); // 3
배열 생성의 경우 JavaScript가 4 가지 방법을 지원합니다.
1. 리터럴 (위의 예에서 브래킷 표현식과 같은)을 사용하여 배열 객체를 직접 작성하십시오.
2. Array () 생성자를 사용하고 매개 변수를 전달하지 마십시오. 이 경우 빈 배열이 []와 동일한 효과로 생성됩니다.
3. 배열 () 생성자를 사용하여 배열의 길이로 양수 정수를 전달하십시오. 이 경우 JavaScript는이 배열을 저장하기 위해 해당 메모리 공간을 예약합니다. 배열의 키는 현재에 정의되지 않았다는 점에 주목할 가치가 있습니다. 즉, 배열에는 멤버가 없습니다. 그 효과는 [,,,]의 효과와 동일합니다.
4. 배열 () 생성자를 사용하여 배열의 멤버를 전달하십시오.
실험:
코드 사본은 다음과 같습니다.
var z = 새로운 배열 (10); // 메모리를 사전 할당하지만 아직 인덱스가 정의되지 않았습니다.
Console.log (3 인치); // false
var m = 새로운 배열 (42, 33, 99, "테스트", {k : 99});
console.log (m); // [42, 33, 99, "테스트", 객체 {k = 99}]
ECMAScript 5 표준에서 Array.isArray ()를 사용하여 개체가 배열인지 확인할 수 있습니다.
코드 사본은 다음과 같습니다.
Array.isArray ([]); // true
Array.isArray ({}); // false