JavaScript数组中的负向索引是否有助于数组长度?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (36)

在JavaScript中,我定义了一个这样的数组

var arr = [1,2,3];

我也可以做

arr[-1] = 4;

现在如果我这样做

arr = undefined;

我也失去了对arr [-1]值的引用。

对我来说,逻辑上来说,arr [-1]似乎也是arr的一部分。

但是当我遵循(没有将arr设置为undefined)

arr.length;

它返回3而不是4 ;

所以我的观点是如果数组可以用于负指数,这些负指数也应该是它们长度的一部分**。我不知道可能是我错了,或者我可能错过了关于数组的一些概念。

提问于
用户回答回答于

对我来说,逻辑上来说,arr [-1]似乎也是arr的一部分。

是的,但不是你认为的方式。

您可以为数组指定任意属性(就像JavaScript中的任何其他对象一样),这是您在将数组“索引” -1并指定值时正在执行的操作。由于这不是数组的成员,并且只是一个任意属性,因此不应该期望length考虑该属性。

换句话说,下面的代码做同样的事情:

​var arr = [1, 2, 3];

​arr.cookies = 4;

alert(arr.length);
用户回答回答于

length属性将返回高于最高分配的“index”的数字,其中数组“索引”是大于或等于零的整数。请注意,JS允许“sparse”数组:

var someArray = [];
someArray[10] = "whatever";
console.log(someArray.length); // "11"

当然,如果没有元素,那么length0。还请注意,length如果您使用delete删除最高元素,则不会更新。

但是数组是对象,因此您可以使用其他任意属性名称来分配属性,包括负数或分数:

someArray[-1] = "A property";
someArray[3.1415] = "Vaguely Pi";
someArray["test"] = "Whatever";

请注意,即使您提供类似的数字,JS的后台也会将属性名称转换为字符串-1。(就此而言,正整数索引也会成为字符串。)

数组方法(如.pop().slice()等)只能在零或更高的整数“索引”上工作,而不在其他属性上工作,所以length在该点上是一致的。

扫码关注云+社区