몇 년 전 타오바오 왕푸에서 회원카드 스크립트를 다시 작성하던 중 우연히 흥미로운 사실을 발견했습니다. 코드는 유사합니다.
var associative_array = new Array();
associative_array["one"] = "1";
associative_array["two"] = "2";
associative_array["3"] = "3";
if (associative_array.length > ; 0)
{ // to do}
associative_array.length가 항상 0이라는 것을 알게 될 것입니다. 이는 나중에 약간 혼란스러웠습니다. 이것은 모든 사람들이 IE가 CSS 속성인 display:inline -block을 지원한다고 생각하는 것과 똑같다는 것을 깨달았습니다. 이는 순전히 우연이자 오해입니다.
사실( 《유해한 것으로 간주되는 JavaScript “연관 배열”에서 인용):
자바스크립트 배열(숫자형)은 키/값 쌍을 유지하는 데 사용되는 경우가 많습니다. 대신 개체를 사용해야 합니다.
//일반 아이디어: 배열은 숫자만 지원하며 키-값 대응은 객체에 사용됩니다.
배열 생성자에서 문자열 키를 지정할 수 있는 방법이 없습니다. //문자열 키 값은 배열 생성자에서 정의할 수 없습니다.
배열에서 문자열 키를 지정할 수 있는 방법이 없습니다. literal . //문자열 키는 배열 리터럴에 정의될 수 없습니다.
Array.length는 이를 항목으로 계산하지 않습니다. // Array.length는 문자열 키를 계산하지 않습니다.
배열 자세히 살펴보기:
1. 할당된 값에 따라 배열의 크기를 자동으로 조정할 수 있습니다
var ar = [];
ar[2] = 1;
alert(ar.length)
이 배열의 길이는 3입니다. , 초기화된 것과 같습니다. 배열과 동일합니다. 할당이 없는 모든 배열 객체는 정의되지 않은 것으로 정의됩니다.
더 읽어보기:
2. "The Miller Device" 방법을 사용하여 배열인지 확인할 수 있습니다.
function isArray(o) { return Object.prototype.toString.call(o) === '[object Array]';}
" "The Miller Device"의 놀라운 사용은 배열을 결정하는 것뿐만 아니라:
var is = {
types : ["Array","RegExp","Date","Number","String","Object"]
};
for(var i= 0,c;c=is.types[i ];){
is[c] = (function(type){
반환 함수 (obj){
return Object.prototype.toString.call( obj) == "[object " type "]"
}
})(c)
}
더 읽어보기: