代码之家  ›  专栏  ›  技术社区  ›  chakrit Dutchie432

为什么JS哈希/dict中的“key”部分应该是字符串?

  •  6
  • chakrit Dutchie432  · 技术社区  · 17 年前

    在大多数JSON序列化程序/反序列化程序中,javascript字典/散列数组中的“key”部分是作为字符串编写的。

    使用字符串作为键而不只是输入预期的名称有什么好处?

    例如,假设我定义了两个对象 k1 k2 像这样:

    var k1 = { a: 1, b: 2, c: 3 };          // define name normally
    var k2 = { "a": 1, "b": 2, "c": 3 };    // define name with a string
    

    然后我进行了以下测试:

    alert(k1 == k2);                   // false (of course)
    
    alert(k1.a == k2.a);               // true
    alert(k1["b"] == k2["b"]);         // true
    
    alert(uneval(k1));                 // returns the k1 object literal notation.
    alert(uneval(k2));                 // returns the same string as above line.
    
    alert(uneval(k1) == uneval(k2));   // true
    

    那么,把这些键放在双引号(字符串)中有什么意义呢? K2 定义了,而不是像在 K1 定义了吗?


    我刚在 Ajaxian 指向 Aaron Boodman's blog entry :

    chromium.tabs.createTab({
     "url": "http://www.google.com/",
     "selected": true,
     "tabIndex": 3
    });
    

    因为他也使用camel case作为tabindex,所以我根本看不到使用字符串的任何意义。

    为什么不:

    chromium.tabs.createTab({
     url: "http://www.google.com/",
     selected: true,
     tabIndex: 3
    });
    

    为什么JS忍者会遵循旋转的惯例? url , selected tabIndex 变成字符串?

    4 回复  |  直到 17 年前
        1
  •  7
  •   Brian Campbell Dennis Williamson    17 年前

    因为 JSON 是实际javascript文本语法的子集。为了实现JSON解析器的简单性,总是需要在字符串周围使用双引号,并且由于JSON中的键是字符串,所以在那里需要双引号。

    并非所有合法的javascript都是合法的JSON。虽然您可以在不带引号的javascript中定义对象文本,但如果您想要可互操作的JSON,则需要将它们放入其中。

        2
  •  1
  •   gizmo    17 年前

    因为这样做,您可以避免错误地使用javascript保留关键字,例如“do”。使用字符串符号可以使您保持安全。

        3
  •  0
  •   chaos    17 年前

    如果要相信json.org中的语法图,则bareword属性名是非标准的。您在多少个浏览器上运行了测试?

        4
  •  0
  •   Rashack    17 年前

    除了远离保留的关键字之外,您还可以在属性名称中使用任何字符-包括空格、冒号…

    不太确定你为什么要这样做。我更喜欢使用普通的“对象”符号。