2010-07-17 30 views
2

我宣佈一個這樣的數組:如何使用字符串「watch」作爲JavaScript關聯數組中的鍵?

var dict = []; 

當我這樣做:

dict["watch"] = 0; 

這種表達提醒NaN

alert (dict["watch"]); 

我知道這是因爲watch()是一個函數,是對象原型的一部分。反正有這個,所以我可以使用任何單詞作爲我的數組中的一個鍵?

我使用的是Firefox 3.6.6

+1

如果您使用的是Firefox,唯一具有Object.watch的瀏覽器,那麼您爲什麼在警報中看到'NaN'而不是'watch'功能?我也是Firefox 3.6.6,我看到'function watch(){[native code]}'。 – Anurag 2010-07-17 01:38:32

+0

問題是,在我的代碼中的某個地方,我沒有檢查'dict [「watch」]'是一個函數。我的代碼所做的一件事是:'dict [「watch」] ++',所以它試圖增加一個函數。 – 2010-07-17 01:44:13

+0

謝謝Anurag - 我不知道那種方法。方便知道以備將來參考。我認爲這是不可數的? – lucideer 2010-07-17 01:50:27

回答

1

你可以做到以下幾點:關聯數組

var dict = 
    { 
     "watch": 0 
    }; 

alert(dict["watch"]); 
+1

標記你的答案是正確的,因爲你建議的東西,比其他答案更早運行 – 2010-07-17 01:40:11

1

速記*是大括號,而不是正方形的:

var dict={}; 
dict["watch"] = 0;

或簡單地說:

var dict={ watch:0 };

*從技術上講,JavaScript沒有「關聯數組」,它有「對象」 - 但它們的工作方式與實現這種特定目的的方式相同。

1

我找到了問題的根源(當然這是在5秒鐘後,我問我的問題):

我的代碼檢查,在dict關鍵是分配這樣一個值之前未定義或爲空:

if (dict[key] == null) 
     dict[key] = 0; 

但由於「手錶」是對象原型的一部分,因此dict[key] == null永遠不會成立。

編輯:

然而,即使我這樣做:

if (typeof dict[word] == "function" || dict[word] == null) 
    dict[word] = 0; 

dict["watch"] 

的值現在爲function watch(){ native code }或類似的

明白了什麼:

以我無窮的智慧,我在我的代碼中有一個類似的錯誤,現在我已經修復了。感謝大家的幫助!

1

嘗試dict = {}[]用於數組文字,{}用於對象文字,或多或少是散列。它會令人困惑,因爲你仍然使用方括號來建立索引。

1

你在哪裏執行你的代碼?在Firefox 3.3.6中,Chrome 5.0.375。99測試版,IE 8和Safari 5,它會爲我提醒0。

+0

我使用Firefox 3.6.6 – 2010-07-17 01:35:01

相關問題