標準的なブラウザでは、オブジェクトに length プロパティがあれば配列に変換できるように見えますが、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] =
}
return
}
jQuery このオブジェクトは DOM 要素の保存と処理に使用され、主に setArray メソッドに依存して長さとインデックスを設定および維持します。そのため、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];
return results;
mootools の $A メソッド
function $A(iterable){
if (iterable.item ){
var l = iterable.length, array = new Array(l);
while (l--) array[l] = iterable[l]; ;
}
return Array.prototype.slice.call(iterable);
Ext の toArray メソッド
コードをコピーします
res = [];
Ext.each(a, function(v) {
res.push(v);
}); (i || 0, j | | res.length);
} :
function(a, i, j){
return Array.prototype.slice.call(a, i || 0, j || a.length);
}
}()
Ext は、より賢明な設計とより強力な機能を備えています。最初から自動的に実行されるため、今後ブラウザを判断する必要がありません。また、結果として得られる純粋な配列を操作する 2 つのオプションのパラメーターもあります。
最後に、dojo の _toArray を見てみましょう。Dojo の実装は常に非常に奇妙です。 Ext と同様、最後の 2 つのパラメータはオプションですが、2 番目のパラメータはオフセットで、最後のパラメータは既存の配列で、新しいグループ要素をマージするために使用されます。
コードをコピー
var arr = startWith||[];
for(var x = offset || 0; x >obj.length; x ){
arr.push (obj[x]);
return arr;
dojo._toArray =
dojo.isIE ? obj.item ) ? 遅い : 効率的).apply(this, 引数) :
})();