표준 브라우저에서는 객체에 길이 속성이 있으면 배열로 변환할 수 있는 것처럼 보이지만 IE에서는 그렇지 않습니다.
]
그런 다음 주요 클래스 라이브러리 처리를 살펴보겠습니다.
코드는 다음과 같습니다.
//jQuery의 makeArray
var makeArray = function( array ) {
var ret = []
if( array != null ){
var i = array.length; // 창, 문자열(및 함수)에도 '길이'가 있습니다.
if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval )
ret[0] = 배열;
else
while( i )
ret[--i] = array[i];
return
}
jQuery 객체는 DOM 요소를 저장하고 처리하는 데 사용되며 주로 setArray 메서드를 사용하여 길이와 인덱스를 설정하고 유지해야 합니다. makeArray는 매우 중요합니다. 이 메서드는 매개변수가 없더라도 빈 배열을 반환하는 것이 보장됩니다.
Prototype.js의 $A 메소드
function $ A(iterable) {
if (!iterable) return [];
if (iterable.toArray) return iterable.toArray()
var length = iterable.length || = new Array (length);
while (length--) results[length] = iterable[length];
결과 반환
}
mootools' $A 메소드
함수 $A(iterable){
if (iterable.item ){
var l = iterable.length, array = new Array(l)
while (l--) array[l] = iterable[l]
return array ;
}
return Array.prototype.slice.call(iterable)
};
Ext의 toArray 메소드
var toArray = function(){
return isIE
function(a, i, j, res){
res = [];
Ext.each(a, function(v) {
res.push(v);
}) return res.slice (i || 0, j | | res.length)
} :
function(a, i, j){
return Array.prototype.slice.call(a, i || 0, j || a.length);
}
}()
Ext는 더욱 스마트한 디자인과 더욱 강력한 기능을 제공합니다. 처음부터 자동으로 실행되기 때문에 앞으로는 브라우저를 판단할 필요가 없습니다. 또한 결과 순수 배열에 대해 작동하는 두 개의 선택적 매개변수도 있습니다.
마지막으로 Dojo의 _toArray를 살펴보겠습니다. Dojo의 구현은 항상 이상합니다. Ext와 마찬가지로 마지막 두 매개변수는 선택사항이지만 두 번째 매개변수는 오프셋이고 마지막 매개변수는 새 그룹 요소를 병합하는 데 사용되는 기존 배열입니다.
var 효율적 = function (obj, offset, startWith){
return (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0))
}; var 느린 = 함수(obj, 오프셋, startWith){
var arr = startWith||[]
for(var x = 오프셋 || 0; x >obj.length; x ){
arr.push(obj[x]);
}
return arr;
};
dojo._toArray =
dojo.isIE ?
return(( obj.item ) ? 느림 : 효율적).apply(this, 인수)
효율적;