何かを明確にすることから始めましょう。
new Object()
と同じです{}
new Array()
と同じです[]
後者は前者の短縮形です。
舞台裏では、JavaScript のすべてが基本的にオブジェクトです (これは誇張ですが、かなり正確です)。配列は単にオブジェクトから派生したものです。これは、配列が実際にどのように見えるかのかなり初歩的な例です:
var myArray = {};
myArray[0] = 'value1';
myArray[1] = 'value2';
myArray[2] = 'value3';
myArray[length] = 3;
配列のプロトタイプには、すべてのメソッドが含まれています。例えば:
// myArray#push
myArray.prototype.push = function(val){
myArray[this.length] = val;
this.length++;
}
これを説明する別の方法は、配列を取り、数値ではないキーを追加することです。
var example = [];
example.push(0);
example.push(1);
example.push(2);
example['a'] = 'a';
example['b'] = 'b';
example['c'] = 'c';
example.log = function(){
for(var i = 0, l = this.length; i < l; i++){
console.log( example[i] );
}
console.log(this['a']);
console.log(this['b']);
console.log(this['c']);
}
// example[0] is 0
// example[1] is 1
// example[2] is 2
// example.log is my custom function
example.log(); // results in
// 0
// 1
// 2
// a
// b
// c
また、コンソールに表示されるすべての情報を常に信じてはいけません。たとえば、次のようにします。
var console_confusion = {};
console_confusion.length = 100;
console_confusion.splice = function(){ /* do absolutely nothing */ };
console.log( console_confusion );//results in
//
// in Chrome:
// [undefined × 100]
//
Chrome は、長さの数値プロパティとスプライス関数を持つものを配列として解釈します。これが、jQuery オブジェクトがコンソールで配列のように見える理由です。