让我们首先澄清一些事情:
new Object()
是相同的{}
new Array()
是相同的[]
后者只是前者的缩写形式。
在幕后,javascript 中的一切基本上都是一个对象(这有点夸张但相当准确)。数组只是从对象派生而来。这是一个相当基本的示例,说明 Array真正的样子:
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 对象在控制台中看起来像数组的原因。