2012-06-13 77 views
2

我一直在JavaScript問題上掙扎了好幾個月,其中有一些屬性的數組,然後檢查其中一些屬性以決定是否向用戶顯示消息。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']不是未定義的,而是一些隨機值,因此有時被認爲是偶然的?或者這是一個愚蠢的想法?

如果這不是問題,那麼我不知道是什麼..

提前感謝!

+0

嘗試QAR [ '做'] ==未定義警報( '傳遞消息'); –

+0

@Jurgen:還有疑問嗎?我在下面看到一個有效的答案。 – 2012-06-13 14:06:11

回答

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!'); 
} 
+0

謝謝!你說得對,我錯誤地使用了Array()。但是,當我檢查 if(qar ['done']) continue; 當qar ['done']沒有定義時,它實際上並沒有給出該消息,所以繼續語句**被執行。所以我的問題仍然存在:在IE7中,由於某種原因,這個未定義的值是否可以解釋爲真? – Jurgen

+0

可能還有一些其他錯誤,它沒有運行該代碼。但是我創建了一個小提琴,它也在Internet Explorer中第一次發出警報。 jsfiddle.net/emphaticsunshine/axeYJ – emphaticsunshine

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!'); 
}