Javascript:数组中具有不同键类型的意外空元素?

V S*_*S X 2 javascript arrays object

有人可以解释一下这段 JavaScript 代码中发生了什么:

    let arr = [];

    arr["foo"] = "11";
    arr["sd"] = "12";
    arr[1] = "13";

    console.log(arr.length); //2
    console.log(arr) // [empty, "13", foo: "11", sd: "12"]
Run Code Online (Sandbox Code Playgroud)

为什么empty数组中有一个元素?

另外,为什么数组length等于 2 而不是 4?

Poi*_*nty 6

非数字属性名称不计入 JavaScript 中数组的长度。通过设置arr[1]您将长度强制为 2,因为长度始终比最大数字属性名称大 1。因此,您的数组隐式具有一个空元素 0、一个带有值的元素 1,以及另外两个带有字符串键的属性。