jQueryは、(ES標準で)配列のようなオブジェクトを作成します。特に、長さプロパティを持ち、lengthプロパティを使用すると、整数ベースのインデックスの下に関連アイテムを配置します。
それは同じくらい簡単です:
:あなたは、
the standard(15.4.4)で、あなたは一人一人の下に、以下の注意事項を参照してくださいよ、特に
Array.prototype
方法を見てみる場合は
var arrayLike = {length: 3, 0:'first', 1:'second', 2:'third'};
Array.prototype.join.call(arrayLike, '|'); // "first|second|third"
注*機能は意図的に汎用です。 この値がArrayオブジェクトである必要はありません。したがって、方法として使用するために他の種類のオブジェクトに に転送することができます。 *関数が をホストオブジェクトに正常に適用できるかどうかは実装依存です。あなたはこれらのアルゴリズムの記述を見れば、彼らはかなりちょうどオブジェクトを反復するためにlengthプロパティを使用します(私たちの場合は配列のようなオブジェクト)と整数ベースそれらの後ろの値にアクセス
キー。その理由から、それらはジェネリックであり、関連するプロパティを持つ通常のjsオブジェクトで動作します。
本質的にそれはすべてjQueryのことです(私が正しく覚えていれば、建物はsizzle、jqueryのcssセレクタエンジンで実行されます)。これをテストしたり、さまざまな方法で証明したりすることができます。例えば、標準JS配列は、長さプロパティが短縮され、いくつかの魔法を実行するが、jQueryオブジェクトはない:
var arr = [1,2,3], $arr = $('div'); // assuming three divs
arr.length=2; arr[2]; // undefined
$arr.length=2; $arr[2]; // still references the div
http://jsfiddle.net/cnkB9/
だからjQueryのmakeArray
はjQueryのアレイのようなオブジェクトに変換し、そしてなりますそれは実際のネイティブjs配列に変換されますが、あなたが言ったように、すべてのjqueryメソッドが添付されているわけではありません。 What makes Firebug/Chrome console treat a custom object as an array?length
財産の存在とsplice
関数は最もコンソールに配列のように表示されるようにすることを説明します。
は、それがコンソールに表示する理由については、私はこの素晴らしい答えを参照してください。言及したように、それはFF4のWebコンソールでは当てはまりません。これは、それがネイティブjs配列ではないことを示しています。興味深いことに、関数は、実際には機能しておらず、存在し、関数である必要はありません。たとえば:
>> console.log({length:2,0:'some',1:'thing',splice:new Function});
["some", "thing"]
おそらく 'NodeList'は配列のように動作しますが、そうではありません。 – BoltClock
どのようなArray-Objectsですか?あなたはそれがオブジェクトではなく配列を記録することをどのように知っていますか? –