数组说它的长度是 0 但控制台说不是

Array Says Its Length Is 0 But Console Says Otherwise

下午好, 我的代码遇到问题: 我有一个用于向数组变量添加值的函数,但每当我 运行 页面时,它都会给我一个错误,指出数组为空。下面是向数组添加值的代码:

    if(this.Type === "Image") {
        this.Frames = [];
        for(var i = 0; i <= Sources.length - 1; i++) {
            var Img = new Image();
            Img.src = Sources[i];
            this.Frames["Frame" = i] = Img;
        }
    } else {
        this.Frames = [];
        for(var i = 0; i <= Sources.length - 1; i++) {
            this.Frames["Frame" + i] = Sources[i];
        }
    }

代码 运行 没问题。我怎么知道的?好吧,我继续 JavaScript 控制台并检查数组的值。它说 Frames[0],但当我折叠它时,它有 Frame0,当我折叠它时,它的来源是正确的来源。那么,这是怎么回事?这是一个小故障还是我做错了我以前不知道的事情? 提前致谢。

JavaScript 数组的 .length 属性 仅计算名称为看起来像整数(如“0”、“1”等)的字符串的属性。您可以向数组实例添加任何您想要的属性,但只有数字属性会影响数组的长度。

那是因为 JavaScript 只有 numeric 数组。它没有有关联数组。

当您执行以下操作时:this.Frames["Frame" + i] = Sources[i];,您所做的是将 属性 添加到数组中(在 JavaScript 中,一切都是一个对象,因此可以具有属性)。您实际上并不是 推入数组。

您可以做的一件事是改用对象:this.Frames = {};.

或者,您可以 .push() 加入数组并将其用作数值数组。

this.Frames[i] = Sources[i];
// or
this.Frames.push(Sources[i]);