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 など)。たとえば、その qar['done'] は未定義ではありませんが、ランダムな値であるため、誤って true と見なされることがありますか? それとも、それは愚かなことだと思いますか?

これが問題ではない場合、何が問題なのかわかりません..

前もって感謝します!

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 に答える