请注意,当您使用位置(或 0)索引时,值将放置在数组中:
var array = [];
array[0] = "Foo";
array[1] = "Bar";
// Result: ["Foo", "Bar"]
// Length: 2
当您添加非索引值(不是 0-9+)时,情况并非如此:
var array = [];
array[0] = "Foo";
array[1] = "Bar";
array[-1] = "Fizzbuzz"; // Not a proper array index - kill it
// Result: ["Foo", "Bar"]
// Length: 2
仅当您按照规则进行操作时,才会将值放置在数组中。如果你不这样做,他们就不会被接受。然而,它们在 Array 对象本身上被接受,这在 JavaScript 中几乎任何东西都是如此。即使["Foo", "Bar"]
是我们数组中唯一的值,我们仍然可以访问"Fizzbuzz"
:
array[-1]; // "Fizzbuzz"
但请再次注意,这不是数组值的一部分,因为它的“索引”无效。相反,它只是作为另一个成员添加到数组中。我们可以以相同的方式访问其他数组成员:
array["pop"]; // function pop() { [native code] }
请注意,我们正在访问pop
数组上的方法,这告诉我们这包含本机代码。我们不是使用“pop”键访问任何数组值,而是数组对象本身的成员。我们可以通过循环访问对象的公共成员来进一步确认这一点:
for (var prop in array)
console.log(prop, array[prop]);
吐出以下内容:
0 Foo
1 Bar
-1 Fizzbuzz
再说一遍,它在object上,但不在array中。
真棒问题!导致我肯定做了双重考虑。