Массивы Javascript - это объекты. Подробнее см. В https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Predefined_Core_Objects#Array_Object .
Примечание: если вы поставьте нецелое значение для оператора массива в приведенном выше коде, свойство будет создано в объекте, представляющем массив, вместо элемента массива.
blockquote>JSON поддерживает только подмножество Javascript. Подробнее см. В http://www.json.org/ .
JSON построен на двух структурах:
blockquote>
- Коллекция пар имен / значений. На разных языках это реализуется как объект, запись, структура, словарь, хэш-таблица, список клавиш или ассоциативный массив.
- Упорядоченный список значений. В большинстве языков это реализуется как массив, вектор, список или последовательность.
Массив Javascript, который имеет свойства, созданные в базовом объекте, не вписывается ни в один из эти структуры, поскольку в ней есть как набор пар имя / значение, так и упорядоченный список значений, поэтому нет простого способа представления такого объекта непосредственно в JSON.
Метод JSON.stringify определен в спецификации ECMAScript. Например, см. http://www.ecma-international.org/ecma-262/5.1/#sec-15.12.3 .
Хотя есть много деталей, бит, который имеет значение здесь, - это то, как строятся значения объекта:
Если Type (value) - Object, а IsCallable (значение) - false
blockquote>
- Если кнопка [ [Class]] внутреннее свойство value - «Array», а затем возвращает результат вызова абстрактной операции JA с аргументом.
- Else, возвращает результат вызова абстрактной операции JO с аргументом.
Учитывая ваш массив, несмотря на добавление параметров к базовому объекту, результатом является упорядочение упорядоченного набора элементов массива, а не основного объекта.
Нет ничего плохого в добавлении параметров в объект массива, но они не являются частью массива, а функции или методы, которые обрабатывают массивы, могут игнорировать их или решать с ними произвольно. Вы видели, что JSON.stringify игнорирует дополнительные параметры. Другие функции могут работать иначе - вам нужно будет узнать в каждом случае.
Хотя это не так, вероятно, будет легче понять, если вы не добавляете свойства к объектам массива. Если вы хотите добавить свойства, начните с объекта без массива.
Вместо:
var b = []; b['foo'] = 56; b['bar'] = 78;
Вы можете использовать:
var b = {}; b['foo'] = 56; b['bar'] = 78;
Javascript не поддерживает ассоциативные массивы (как PHP).
var b = [];
Объявление явного массива при попытке создать объект.
Массивы в Javascript могут содержат только индексный подход массивов, тогда как объекты больше ассоциативных массивов.
Если вы измените var b = [];
на var b = {};
, это решит проблему.
var b = {}
Объявление явно объект.
[/g1]
Эта привязка из IE explorer. См. Массив по-прежнему пуст.
На самом деле способ вставки элементов в массив:
1. Используйте push (). 2. Вставьте элементы в массив во время объявления
. Если вы хотите сгенерировать массив, у вас должны быть данные внутри массива.
Итак, теперь вы хотите чтобы выровнять пары значений ключа, поэтому вам нужно передать объект в качестве аргумента JSON.stringify () следующим образом:
var test = {}; // Object
test['a'] = 'test';
test['b'] = []; // Array
test['b'].push('item');
test['b'].push('item2');
test['b'].push('item3');
var json = JSON.stringify(test);
alert(json);
Решение вашей проблемы сейчас:
[/g2]
Примечание. Консоль Google Chrome дает разные результаты, что является ошибкой в Google Chrome.