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),
它有效。
你能解释一下为什么会这样吗?
答案 0 :(得分:1)
为什么会发生这种情况
因为当您尝试读取其map
属性时尚未构造mapSize
对象。因此this.mapSize
会为您提供undefined
。结果undefined * unedefined
生成NaN
。并且无法使用NaN
长度创建数组。只需new Array(NaN)
,您就会看到相同的错误。