【发布时间】:2020-02-11 13:16:04
【问题描述】:
今天我发现一个奇怪的代码
const nums = [1, 2, 3]
console.log(nums[-1])
我可以看到日志是undefined。为什么在 JavaScript 中,我们可以访问无效索引而不会抛出任何错误?
【问题讨论】:
-
因为这是定义语言的工作方式。
-
JS 数组是一个“类似列表”的对象,对象可以有不同的属性。当您使用 非标准 索引时,您不能再依赖
length属性。 -
“为什么?”该语言以某种方式工作是无法回答的,除非由该语言的发明者负责。你要求一个索引并返回未定义,这在 JavaScript 中并不奇怪。 JS 中的数组是可以增长到任意大小的关联数组,它们不像其他语言那样是固定的连续内存集。您需要做的就是在尝试使用之前检查该值是否已定义。
-
@skyline3000 没有任何大小。最大长度为 2³² − 1(因此最大索引为 2³² − 2)。您仍然可以分配更高的索引,但它们不会成为实际可迭代的一部分。此外,在大多数情况下,您不需要检查索引。如果你没有使用sparse arrays,你可以例如使用可用的
Array方法对它们进行迭代。
标签: javascript arrays