为什么通过点表示法创建的 JavaScript 数组项存在,但未计入 array.length 中?

Bri*_*lip -1 javascript arrays

尽管违反直觉,但可以使用点表示法创建 JavaScript 数组“属性”:

const arr = [];

arr.dot = "notation";

console.log(arr.dot); // "notation"
Run Code Online (Sandbox Code Playgroud)

很奇怪,但是还好。然而,数组的长度仍然为 0:

const arr = [];

arr.dot = "notation";

console.log(arr.dot); // "notation"

console.log(arr.length); // 0
Run Code Online (Sandbox Code Playgroud)

两个问题:

  1. 为什么数组的长度不受通过点表示法分配的属性的影响?
  2. 为什么可以通过点表示法将属性分配给数组?

Kyl*_*yle 5

JavaScript 数组只是一个对象。dot您正在设置对象的属性。

您可以通过执行以下操作来确认数组是一个对象:

typeof arr

length属性是根据数组中的数字条目数计算的。

以下是摘自developer.mozilla.org的摘录:

数组不能使用字符串作为元素索引(如在关联数组中),但必须使用整数。使用括号表示法(或点表示法)通过非整数设置或访问不会从数组列表本身设置或检索元素,但会设置或访问与该数组的对象属性集合关联的变量。数组的对象属性和数组元素列表是分开的,数组的遍历和变异操作不能应用于这些命名属性。