数组表示其长度为0但是控制台表示不是

时间:2015-09-14 22:05:19

标签: javascript arrays canvas console

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

    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控制台并检查数组的值。它说框架[0],但是当我折叠它时,它有Frame0,当我折叠它时,它拥有的源是正确的源。那么,这是怎么回事?这是一个小故障还是我做错了以前我不知道的事情? 提前谢谢。

This is what comes up on the console

2 个答案:

答案 0 :(得分:5)

那是因为JavaScript只有数字数组。它 具有关联数组。

执行:this.Frames["Frame" + i] = Sources[i];时,您正在做的是向数组中添加属性(在JavaScript中,所有内容都是对象,因此可以具有属性)。你实际上并没有推送到数组。

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

或者,您可以.push()到数组上并将其用作数字数组。

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

答案 1 :(得分:0)

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