我宣布一个这样的数组:如何使用字符串“watch”作为JavaScript关联数组中的键?
var dict = [];
当我这样做:
dict["watch"] = 0;
这种表达提醒NaN
alert (dict["watch"]);
我知道这是因为watch()
是一个函数,是对象原型的一部分。反正有这个,所以我可以使用任何单词作为我的数组中的一个键?
我使用的是Firefox 3.6.6
我宣布一个这样的数组:如何使用字符串“watch”作为JavaScript关联数组中的键?
var dict = [];
当我这样做:
dict["watch"] = 0;
这种表达提醒NaN
alert (dict["watch"]);
我知道这是因为watch()
是一个函数,是对象原型的一部分。反正有这个,所以我可以使用任何单词作为我的数组中的一个键?
我使用的是Firefox 3.6.6
你可以做到以下几点:关联数组
var dict =
{
"watch": 0
};
alert(dict["watch"]);
标记你的答案是正确的,因为你建议的东西,比其他答案更早运行 – 2010-07-17 01:40:11
速记*是大括号,而不是正方形的:
var dict={};
dict["watch"] = 0;
或简单地说:
var dict={ watch:0 };
*从技术上讲,JavaScript没有“关联数组”,它有“对象” - 但它们的工作方式与实现这种特定目的的方式相同。
我找到了问题的根源(当然这是在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 }
或类似的
明白了什么:
以我无穷的智慧,我在我的代码中有一个类似的错误,现在我已经修复了。感谢大家的帮助!
尝试dict = {}
。 []
用于数组文字,{}
用于对象文字,或多或少是散列。它会令人困惑,因为你仍然使用方括号来建立索引。
你在哪里执行你的代码?在Firefox 3.3.6中,Chrome 5.0.375。99测试版,IE 8和Safari 5,它会为我提醒0。
我使用Firefox 3.6.6 – 2010-07-17 01:35:01
如果您使用的是Firefox,唯一具有Object.watch的浏览器,那么您为什么在警报中看到'NaN'而不是'watch'功能?我也是Firefox 3.6.6,我看到'function watch(){[native code]}'。 – Anurag 2010-07-17 01:38:32
问题是,在我的代码中的某个地方,我没有检查'dict [“watch”]'是一个函数。我的代码所做的一件事是:'dict [“watch”] ++',所以它试图增加一个函数。 – 2010-07-17 01:44:13
谢谢Anurag - 我不知道那种方法。方便知道以备将来参考。我认为这是不可数的? – lucideer 2010-07-17 01:50:27