1

在内部,JavaScript 只有对象(和原始类型)。对象是对的无序集合key:value,其中key是字符串,value可以是任何 JavaScript 类型。

数组虽然在外观上看起来像任何其他语言的普通数组,但实际上是对象的一种特殊情况,具有本机支持的语言语法。

每个数组都是一个对象,其中键是数字,值可以是任何类型。键由 JavaScript 本身管理,因此我们可以将数组作为有序的值集合进行操作。这就是我们也可以在for-in循环中使用数组的原因。此外,JavaScript 提供了标准的数组操作(长度、索引、拼接、切片、连接)作为使用编号键来完成它们的事情的方法。

>>> typeof []
"object"

>>> Object.prototype.toString.call([])
"[object Array]"

我的理解是正确的,还是我遗漏了什么?

4

1 回答 1

0

您错过的一件事是数字索引本身只是数组对象的命名属性,它们没有潜在的顺序。

可能值得记住的另一件事是可以修改 Array 构造函数,这将从那时起影响所有数组。

考虑以下:

var a = new Array(1,2,3,4,5);
a.slice(1); // returns [2,3,4,5]

//Now for some prototype modification
Array.prototype.slice = function(){alert("Foo");};

var b = new Array(1,2,3,4,5);
a.slice(1); // alerts "Foo"!

//The [] syntax is also affected
var c = [1,2,3,4,5];
c.slice(1); // alerts "Foo"!
于 2012-11-26T07:45:26.383 回答