我有一个像这样声明的数组:
var dict = [];
当我这样做时:
dict["watch"] = 0;
此表达式提醒NaN
alert (dict["watch"]);
我知道这是因为watch()
是一个函数,它是对象原型的一部分。反正有这个,所以我可以用任何单词作为我的数组中的一个键吗?
我使用的是Firefox 3.6.6
答案 0 :(得分:1)
您可以执行以下操作:
var dict =
{
"watch": 0
};
alert(dict["watch"]);
答案 1 :(得分:1)
关联数组的简写 * 是大括号,而不是方括号:
var dict={};
dict["watch"] = 0;
或者简单地说:
var dict={ watch:0 };
* 从技术上讲,javascript没有“关联数组”,它有“对象” - 但它们在这个特定目的下以相同的方式工作。
答案 2 :(得分:1)
我找到问题的根源(当然是在我提出问题后5秒):
我的代码在分配这样的值之前检查dict
中的密钥是否未定义或为null:
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 }
或类似的东西
明白了:
在我无限的智慧中,我在我的代码中的其他地方遇到了类似的错误,我现在已经修复了。谢谢大家的帮助!
答案 3 :(得分:1)
试试dict = {}
。 []
用于数组文字,{}
用于对象文字,它们或多或少是哈希值。它变得令人困惑,因为您仍然使用方括号进行索引。
答案 4 :(得分:1)
您在哪里执行代码?在Firefox 3.3.6,Chrome 5.0.375.99 beta,IE 8和Safari 5中,它为我提醒0。