2

几个月来,我一直在为一个 JavaScript 问题苦苦挣扎,其中我有一个包含一些属性的数组,后来检查了其中一些属性以决定是否向用户显示消息。

现在这在大多数系统(尤其是更新的浏览器)上一切顺利,但在我客户的一些 IE7 计算机上却不是那么好。

现在我刚刚发现在我的代码中的某个地方我初始化了一个如下所示的新数组,但从未真正设置“完成”的值

var qar=new Array('question_no','pos','done');
qar['question_no'] = 1234;
qar['pos'] = 1234; //dont mind these numbers

稍后在一些 for 循环中,我检查:

//check if this question was already shown
if(qar['done'])
   continue; //stop here, don't show message
//set done to true, so that this question will not be shown again
qar['done'] = true;
window.alert('messaged!');

同样,问题是有时(实际上经常,但并非总是)消息在 IE7 中根本不显示。

现在问你一个问题:我知道 qar['done'] 应该在初始化后立即未定义,这使得我的代码可以正常工作(在 Chrome 等中),但是在 IE7 中,这种情况的处理方式可能不同吗?例如, qar['done'] 不是未定义的,而是一些随机值,因此有时会被意外地认为是真的?或者这是一个愚蠢的想法?

如果这不是问题,那么我不知道是什么..

提前致谢!

4

2 回答 2

1

你的代码应该是这样的:

var qar={};
qar['question_no'] = 1234;
qar['pos'] = 1234; //dont mind these numbers

//check if this question was already shown
if(!qar['done']) {
   //set done to true, so that this question will not be shown again
   qar['done'] = true;
   window.alert('messaged!');
}
于 2012-06-13T11:01:20.663 回答
1

通过做这个:

var qar=new Array('question_no','pos','done');

您只是在创建带有索引的数组。

qar[0] will be 'question_no'
qar[1] will be 'pos'
qar[2] will be 'done'

在这种情况下, qas['done'] 将始终未定义。

这就是它引起问题的原因。您应该使用 javascript 对象而不是使用数组。

但是你可以这样做:

if(typeof qar['done'] === 'undefined'){
   qar['done'] = true;
   alert('messaged!');
}
于 2012-06-13T11:01:21.273 回答