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 중국어 웹사이트의 기타 관련 기사를 참조하세요!