Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试从计算创建数组时,数组长度无效_Javascript_Arrays_Node.js - Fatal编程技术网

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

Javascript 尝试从计算创建数组时,数组长度无效,javascript,arrays,node.js,Javascript,Arrays,Node.js,此代码为我提供了RangeError:数组长度无效。 但是,当没有计算时,如下所示: 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(inde

此代码为我提供了RangeError:数组长度无效。
但是,当没有计算时,如下所示:

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)
        }
    }
};
它起作用了

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

为什么会这样


因为在您尝试读取其
mapSize
属性时,
map
对象尚未构造。因此,
this.mapSize
提供了
未定义的
。因此,
undefined*unefined
产生
NaN
。无法使用
NaN
长度创建和数组。只需尝试
新建数组(NaN)
,您将看到相同的错误。

不是您所想的,但您不需要为数组指定长度,
数据:[
数据
属性的上下文中不是对象,但可能是窗口。除了@elclanrs注释,这里还有一篇文章,介绍为什么不需要使用
new Array()
谢谢!我已经挣扎了这么多,它是如此简单。我刚刚把这个变量放在对象之前。另外:要解决这个问题,可以在map对象之外声明mapSize,比如:
var-mapSize=100,map={mapSize:mapSize,data:[],…}
data: new Array(this.mapSize),