尝试从计算创建数组时数组长度无效

Invalid array length when trying to create an array from calculation

本文关键字:数组 无效 创建 计算      更新时间:2023-09-26
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)
        }
    }
};

这段代码给了我范围错误:数组长度无效。
但是,当没有计算时,如下所示:

data: new Array(this.mapSize),

它有效。

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

为什么会这样

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