0

代码如下:

$('input').click(function(){
    window.array[$(this).attr('id')]=true;
    console.log('Input id: '+$(this).attr('id')+' - Num:'+window.array.length+
        ' - Array value:'+window.array[$(this).attr('id')]);
    alert(window.array.join('\n'));
});

行为很奇怪:当事件被触发时,在控制台中我可以读取Input id: example_id - Num:0 - Array value:true,然后在警报中我得到 undefined (空数组?但控制台告诉我正确的值!)。

当我单击另一个输入时,会发生完全相同的事情,例如尚未触发上一个事件。似乎回调函数每次调用时都会创建一个数组,但我使用的是窗口对象,并且有人告诉我将数组附加到窗口对象与全局变量相同!

你能解释一下这种奇怪的行为吗?

4

2 回答 2

1

数组的length属性是它的最大数值属性加一(如果没有数值属性,则为零)。所以在数组上设置非数字属性不会改变它的长度。

join也只影响数字属性。尽管如此,结果应该是一个空字符串,而不是未定义的。你确定你使用的是普通数组吗?

于 2012-12-07T21:36:29.367 回答
0

您的情况要求您使用对象,因为您需要使用字符串作为“id”。

如果您已定义:

window.array = [ ]

和写:

window.array["id1"] = true; // WRONG!

以上只是意味着您将获得:

window.array["id1"] //true but window.array is still [ ]

这是因为window.array,虽然数组在JavaScript中仍然是一个对象,你可以给它添加属性,但是用法是错误的。要添加到数组中,您需要整数(或字符串形式的整数)作为索引。

window.array[1] = true; // OR window.array["1"] = true (!! even this works)
于 2012-12-07T21:33:24.200 回答