数组是 JavaScript 中特殊类型的对象。它有一个额外的方法和属性列表(例如.length
and .forEach
),并且它还有一个已使用索引的列表(从零开始的整数正数)。
但就像任何其他对象一样,它可以具有其他属性:
var arr = ['A', 'B'];
arr.extra = 'C';
console.log(arr[0], arr[1], arr.extra); // A B C
由于对象属性不仅可以通过点访问,还可以通过方括号访问,因此您可以使用类似数组的语法访问任何属性:
var obj = { extra: 'D' };
console.log(obj['extra']); // D
console.log(arr['extra']); // C
使用相同的语法,您可以分配属性:
obj['x'] = 'E';
obj[33] = 'F';
arr['y'] = 'G';
arr[-1] = 'H';
console.log(obj.x, obj[33], arr.y, arr[-1]); // E F G H
您可以安全地使用数字作为对象的属性名称,它会自动转换为字符串。
唯一的区别是当您使用正整数值作为属性名称时。这些被解释为数组索引。
var arr = [];
arr[0] = 'A';
arr[1] = 'B';
arr[-1] = 'C';
arr.forEach(value => console.log(value)) // A, B
console.log(arr.length); // 2
console.log( Object.keys(arr) ); // ["0", "1", "-1"]