2010-07-17 81 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

相关问题