Почему «ключевая» часть в хеше / dict JS должна быть строкой? - PullRequest
6 голосов
/ 07 апреля 2009

В большинстве сериализаторов / десериализаторов JSON «ключевая» часть в словаре / массиве хэшей javascript записывается в виде строки.

В чем преимущество использования строки в качестве ключа по сравнению с простым вводом предполагаемого имени?

Например, скажем, я определяю два объекта 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? *


Я только что видел это в Аяксиане , указывающем на запись в блоге Аарона Будмана :

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

Поскольку он также использует верблюжий чехол для tabIndex, я не вижу смысла вообще использовать строку.

Почему бы и нет:

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

Почему ниндзя JS следует соглашению превращать url, selected и tabIndex в строку?

Ответы [ 4 ]

7 голосов
/ 07 апреля 2009

Поскольку JSON является подмножеством фактического литерального синтаксиса JavaScript. Для простоты реализации синтаксических анализаторов JSON двойные кавычки всегда требуются вокруг строк, а поскольку ключи в JSON являются строками, они необходимы там.

Не весь допустимый JavaScript является допустимым JSON. Хотя вы можете определять объектные литералы в JavaScript без кавычек, если вы хотите совместимый JSON, вам нужно будет поместить их в.

1 голос
/ 07 апреля 2009

Поэтому вы избегаете по ошибке использовать зарезервированное ключевое слово javascript, например, например, do. Использование строковой нотации обеспечило вам безопасность.

0 голосов
/ 07 апреля 2009

Помимо отказа от зарезервированных ключевых слов, вы можете использовать любые символы в именах своих свойств - включая пробелы, двоеточия ...

Не совсем уверен, зачем ты это делаешь. Я предпочитаю использовать обычную нотацию «объект».

0 голосов
/ 07 апреля 2009

Если верить синтаксической диаграмме на json.org, то имена свойств без слов нестандартны. На скольких браузерах вы запускали свои тесты?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...