> 웹 프론트엔드 > JS 튜토리얼 > JavaScript 배열은 정말 연속적입니까?

JavaScript 배열은 정말 연속적입니까?

DDD
풀어 주다: 2024-11-15 17:43:02
원래의
715명이 탐색했습니다.

Are JavaScript Arrays Really Contiguous?

JavaScript의 희소 배열

JavaScript에서 흔히 저지르는 오해는 배열이 연속적이라고 가정하는 것입니다. 이는 배열이 인덱스 0의 모든 요소를 ​​포함한다는 의미입니다. 현재 길이로. 그러나 이는 사실이 아닙니다. JavaScript 배열은 희박합니다.

현재 길이보다 큰 인덱스를 사용하여 요소에 액세스하거나 설정하면 빈 슬롯이 생성되고 배열이 적절한 위치로 확장됩니다. 크기. 예를 들어 array[Date.getTime()]을 사용하여 값을 설정하면 해당 슬롯이 사용되지 않더라도 인덱스 0부터 현재 시간까지 빈 슬롯을 포함하도록 배열이 확장됩니다.

해시 테이블 구현

스파스 배열은 내부적으로 해시 테이블로 구현됩니다. 정수, 문자열, 부동 소수점 또는 기타 객체일 수 있는 키는 해시에 추가되기 전에 toString()을 사용하여 문자열로 변환됩니다. 이는 유연한 인덱싱 시스템을 가능하게 합니다.

테스트 예

배열의 희소 특성을 확인하려면 다음 테스트 코드를 고려하세요.

var array = [];
array[0] = "zero";
array[new Date().getTime()] = "now";
array[3.14] = "pi";

for (var i in array) {
    alert("array[" + i + "] = " + array[i] + ", typeof(" + i + ") == " + typeof(i));
}
로그인 후 복사

이 코드는 다음을 표시합니다:

array[0] = zero, typeof(0) == string
array[1254503972355] = now, typeof(1254503972355) == string
array[3.14] = pi, typeof(3.14) == string
로그인 후 복사

for...in 구문은 정의된 구문을 반복합니다. 비순차적 인덱스가 있는 요소에 액세스하거나 설정할 때 배열이 빈 슬롯으로 확장됨을 보여줍니다.

브라우저 차이점

다른 브라우저는 유사한 방식으로 희소 배열을 처리합니다. 방식으로 배열을 해시 테이블로 구현합니다. 그러나 매우 큰 인덱스를 처리할 때는 희소 배열 사용을 고려하는 것이 중요합니다. 이는 메모리 소비 및 성능에 영향을 미칠 수 있기 때문입니다.

위 내용은 JavaScript 배열은 정말 연속적입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿