Массивы должны иметь только записи с числовыми ключами (массивы и объекты, но вы действительно не должны смешивать эти).
Если вы преобразуете массив в JSON, процесс будет учитывать только числовые свойства. Другие свойства просто игнорируются, поэтому вы получаете пустой массив. Может быть, это более очевидно, если вы посмотрите на length
массива:
> AssocArray.length
0
То, что часто называют «ассоциативный массив» на самом деле просто объект в JS:
var AssocArray = {}; // <- initialize an object, not an array
AssocArray["a"] = "The letter A"
console.log("a = " + AssocArray["a"]); // "a = The letter A"
JSON.stringify(AssocArray); // "{"a":"The letter A"}"
Свойства объектов может доступ к ним через нотацию или дескриптор массива (если ключ не является зарезервированным ключевым словом). Таким образом, AssocArray.a
совпадает с AssocArray['a']
.
Неверно; массивы также являются объектами. 'Json.stringify' игнорирует свойства массива без массивов. – SLaks
@SLaks: я никогда не говорил, что массивы не являются объектами;) Я просто говорю, что нельзя использовать массив как ассоциативный массив (возможно, возможно, что он может * потому что * они * являются * объектами, но я думаю, что это становится действительно уродливым и путают и, в конце концов, вы ответственны за крах Вселенной ...). –
Чтобы уточнить ответ: когда вы инициализируете его, используйте '{}' или 'new Object()', ** NOT ** '[]' или 'new Array()' – Thymine