开发者

How can I use the string "watch" as a key in a JavaScript associative array?

I have an array declared like this:

var dict = [];

When I do this:

dict["watch"] = 0;

this expression alerts NaN

alert (dict["watch"]);

I know this is because watch() is a function that is part of the object prototype. Is there anyway around this so I can use any word as a 开发者_运维技巧key in my array?

I am using Firefox 3.6.6


You can do the following:

var dict =
    {
        "watch": 0
    };

alert(dict["watch"]);


Shorthand for associative arrays* is curly-braces, rather than square ones:

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

Or simply:

var dict={ watch:0 };

*Technically javascript doesn't have "associative arrays", it has "objects" - but they work in effectively the same way for this specific purpose.


Try dict = {}. [] is for array literals, {} is for object literals, which are, more or less, hashes. It gets confusing, since you still use square brackets for indexing.


Where are you executing your code? In Firefox 3.3.6, Chrome 5.0.375.99 beta, IE 8, and Safari 5, it alerts 0 for me.


I found the root of the problem (of course it was 5 seconds after I asked my question):

My code checks that the key in dict is undefined or null before assigning a value like this:

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

But since "watch" is part of the object prototype, dict[key] == null would never be true.

Edit:

However, even when I do this:

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

the value of

dict["watch"]

is now function watch(){ native code } or something like that

Got it:

In my infinite wisdom, I had a similar mistake somewhere else in my code which I have now fixed. Thanks for everyone's help!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜