请注意,当您使用位置(或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
只有当您遵守规则时,才会将值放入数组中。如果不遵守规则,则不会被接受。但是,它们仍然可以被放在数组对象本身中,这也是JavaScript中的几乎所有内容的情况。即使 ["Foo", "Bar"]
是我们数组中唯一的值,我们仍然可以访问 "Fizzbuzz"
:
array[-1]; // "Fizzbuzz"
但请注意,这不是数组值的一部分,因为它的“索引”无效。相反,它被添加到数组中作为另一个成员。我们可以以同样的方式访问其他数组成员:
array["pop"];
请注意,我们正在访问数组上的
pop
方法,这告诉我们它包含本地代码。我们没有使用键为"pop"的任何数组值,而是在数组对象本身上访问成员。我们可以通过循环遍历对象的公共成员进一步确认这一点:
for (var prop in array)
console.log(prop, array[prop]);
它会输出以下内容:
0 Foo
1 Bar
-1 Fizzbuzz
所以,再次强调,它存在于“对象”中,但不存在于“数组”中。
很棒的问题!确实让我做了两次思考。
arr[1.5] = 1
,这也不会影响数组的长度。语言规范已经非常明确地阐述了什么会影响数组的长度。可能你不喜欢它,但你必须接受它。要么就设计自己的竞争性语言,并说服人们转用它。 - Raymond Chenvar a = []; a ['foo'] ='baz'
,但这并不意味着你应该这样做;显然违反了所有约定。 - elclanrs