代码之家  ›  专栏  ›  技术社区  ›  Chris Laplante

如何使用字符串“watch”作为javascript关联数组中的键?

  •  2
  • Chris Laplante  · 技术社区  · 14 年前

    我有一个这样声明的数组:

    var dict = [];
    

    当我这样做的时候:

    dict["watch"] = 0;
    

    此表达式发出警报 NaN

    alert (dict["watch"]);
    

    我知道这是因为 watch() 是对象原型的一部分。这周围有没有什么可以让我用任何词作为数组中的键?

    我正在使用火狐3.6.6

    5 回复  |  直到 14 年前
        1
  •  1
  •   BrunoLM    14 年前

    您可以执行以下操作:

    var dict =
        {
            "watch": 0
        };
    
    alert(dict["watch"]);
    
        2
  •  1
  •   lucideer    14 年前

    关联数组的简写 * 是大括号,而不是方括号:

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

    或者简单地说:

    var dict={ watch:0 };

    * 从技术上讲,JavaScript没有“关联数组”,它有“对象”,但它们的工作方式实际上与此特定用途相同。

        3
  •  1
  •   Weston C    14 年前

    尝试 dict = {} . [] 用于数组文本, {} 用于对象文本,或多或少是哈希值。它会让人困惑,因为您仍然使用方括号进行索引。

        4
  •  1
  •   Samuel Meacham    14 年前

    您在哪里执行代码?在火狐3.3.6、Chrome5.0.375.99测试版、IE8和Safari5中,它会为我提醒0。

        5
  •  1
  •   Chris Laplante    14 年前

    我找到了问题的根源(当然是在我问问题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 } 或者类似的

    知道了:

    在我无限的智慧中,我在代码中的其他地方也犯了类似的错误,现在我已经改正了。谢谢大家的帮助!