在脚本中我看到了这个:
function addToPoint(x, y) {
x = Math.floor(x/SCALE);
y = Math.floor(y/SCALE);
if (!points[[x,y]]) {
points[[x,y]] = 1;
} else if (points[[x,y]]==10) {
return;
} else {
points[[x,y]]++;
}
drawPoint(x*SCALE,y*SCALE, points[[x,y]]);
}
我认为发生的事情是这样的:
points[[x,y]] = 1;
这里,伙伴动态地为points-object(被声明为空)创建一个字段。通过像这样传递它,它被转换为一个字符串,函数的x和y参数将组成该字段。
所以,实际上,如果我调用addToPoints(3,4),代码会产生这样的结果:
points["3,4"] = 1;
这对我来说真的很奇怪:[x,y]是一个合法的数组吗?这是什么样的符号?这背后的规则是什么?
我稍微使用了代码,看起来你可以通过这样做来在JavaScript中声明一个数组:
[x,y];
帮助,提示和澄清表示赞赏!
答案 0 :(得分:3)
var arr = [ x, y ];
只是declare an array in JavaScript与x
和y
作为第一和第二元素的方式。
第二部分points[[x,y]]
更令人困惑。基本上会发生的事情是arr
数组被转换为字符串(类似于[ 1, 2, 3 ]
将成为"1, 2, 3"
),然后将其用作points
对象上的属性名称
稍微简洁一点(使用实际数字而不是x
和y
参数)会发生什么看起来像这样:
var points = {};
var arr = [ 1, 3 ];
var key = arr.toString(); // '1, 3'
points[key] = 1; // { "1, 3": 1 }
答案 1 :(得分:1)
我相信你在这里想念的是,当你在项目中使用某些东西作为属性名称时,它被转换为字符串:
points[[x,y]]
真的在做
points[[x,y].toString()]
您可以尝试使用
进行测试points[{}]
它会创建密钥[object Object]
使用它的原因是javascript中不支持二维数组,但是你可以有数组数组
这个小技巧允许使用一维数组作为二维数据。
这是一个有趣的伎俩:
Array.prototype.toString = function ( ) { return this.join(':') }
现在 点[[x,y]] = 1
将创建键x:y
而不是x,y