Есть ли короткий способ объявления ассоциативного массива, как в PHP?
$myArray = array('a' => 'b'); // PHP Way
В JavaScript я бы сделал это следующим образом:
var myArray = [];
myArray['a'] = 'b';
Я не ищу объекты JavaScript.
Есть ли короткий способ объявления ассоциативного массива, как в PHP?
$myArray = array('a' => 'b'); // PHP Way
В JavaScript я бы сделал это следующим образом:
var myArray = [];
myArray['a'] = 'b';
Я не ищу объекты JavaScript.
JavaScript не имеет ассоциативных массивов. В вашем примере вы объявляете myArray
как массив, но затем назначаете ему объект. Таким образом, ваш код не отличается от этого:
var myObject = {};
myObject['a'] = 'b';
Обновление: небольшая коррекция. На самом деле исходный код не уничтожает массив. Он просто добавляет к нему регулярное свойство. Это возможно, потому что массивы JavaScript являются подмножеством объектов JavaScript.
Объявите объект следующим образом:
var myArray = {"a": "b", "c": "d"};
... а затем обратитесь к каждому элементу, как это:
var somethingElse = myArray["a"]; //Sets "somethingElse" to "b".
Как @Chris и @Marc упоминают в комментариях: в JavaScript объекты ARE ассоциируют массивы, и наоборот, они просто ссылаются на два разных способа сделать то же самое. Например...
var somethingElse = myArray["a"];
var anotherVariable = myArray.a;
... сделайте то же самое.
Я не ищу объекты JavaScript.
В JavaScript нет "ассоциативных массивов", просто объектов, состоящих из имен свойств и значений, которые можно рассматривать как таковые. Итак, то, что вы ищете, это объекты. На самом деле, этот пример из вашего вопроса работает с объектом:
var myArray = [];
myArray['a'] = 'b';
alert(typeof myArray); // 'object'
Сначала вы создаете объект, используя синтаксис литерала массива:
var myArray = [];
что означает, что вы создали объект, который наследуется от Array.prototype
. По сути, вы имеете дело с объектом, который был дополнен методами, хранящимися в Array.prototype
.
Чтобы проверить, что myArray
на самом деле является массивом (ну, я бы сказал, массивы JavaScript - это псевдо-массивы), вы можете проверить его конструктор:
alert(typeof myArray === 'object' && myArray.constructor === Array);
Там лучший способ, который также будет определять массивы, созданные в разных окнах и кадрах:
alert(Object.prototype.toString.apply(myArray) === '[object Array]');
Вы также можете использовать instanceOf
:
alert(myArray instanceof Array);
или Array.isArray
:
alert(Array.isArray(myArray));
В javascript ассоциативные массивы, коллекции с ключами, хэши,... все, что вы хотите назвать, не являются особым типом. Все следующее хорошо.
a = {}
a[3] = 15
a.b = "c"
a['def'] = 'something'
Этот код создает единственный действительный объект со свойствами, которые вы ожидаете. Все они. Вы можете комбинировать условно проиндексированный массив и ассоциативный массив в одном объекте.
Что касается объявления целой группы одновременно, обычный синтаксис:
a = {
'key1' : 'val1',
'key2' : val2,
key3 : val3,
key4 : "val4"
}