var map = {
    mapSize: 100, // the size of a side
    data: new Array(this.mapSize * this.mapSize),

    getIndex: function(x, y) {
        return x * this.mapSize + y;
    },

    getCoords: function(index) {
        var x = Math.floor(index/this.mapSize);
        return {
            x: x,
            y: index - (x * this.mapSize)
        }
    }
};


这段代码为我提供RangeError:无效的数组长度。
但是,如果没有计算,则如下所示:

data: new Array(this.mapSize),


有用。

您能解释一下为什么会这样吗?

最佳答案

为什么会这样


因为在尝试读取其map属性时,尚未构造mapSize对象。所以this.mapSize给您undefined。结果,undefined * unedefined生成NaN。并且无法使用NaN长度创建数组。仅尝试new Array(NaN),您将看到相同的错误。

关于javascript - 尝试通过计算创建数组时数组长度无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29243454/

10-09 22:09