ассоциативный массив против объекта в javascript
в моем скрипте есть необходимость создать хэш-таблицу, я искал в Google для этого. Большинство людей рекомендуют объект JavaScript для этой цели. Проблема в том, что некоторые ключи в хэш-таблице "." в них. Я могу легко создавать эти ключи с ассоциативными массивами.
Я не понимаю, почему ассоциативные массивы-это плохо. Первое, что упоминается на сайтах, которые я смотрел, - это свойство length. Я исхожу из фона Perl, где я использовать хэши. Чаще всего используется для получения значения из ключа, проверки наличия ключа, удаления пары ключ-значение, добавления пары ключ-значение. Если это мое общее использование, могу ли я безопасно использовать ассоциативный массив?
7 ответов:
в JavaScript объекты являются ассоциативными массивами...для них нет отдельных понятий. Вы также можете безопасно использовать '.'в имени ключа, но вы можете получить доступ только к значению, используя скобочную нотацию:
var foo = {} foo['bar'] = 'test'; foo['baz.bin'] = 'value'; alert(foo.bar); // shows 'test' alert(foo['baz.bin']); // shows 'value'
Если вы уже используете их, и они работают, вы в безопасности.
в javascript объект и массив-это почти одно и то же, причем массив имеет немного магической функциональности (свойство autoupdating length и т. д.) и методы прототипа, подходящие для массивов. Также гораздо проще построить объект, чем использовать ассоциативный массив:
var obj = {"my.key": "myValue"};
vs
var obj = []; obj["my.key"] = "myValue";
поэтому никогда не используйте объект массива для этого, а только обычный объект.
функциональность:
var obj = {}; //Initialized empty object
удалить ключ-значение пара:
delete obj[key];
проверьте, существует ли ключ:
key in obj;
получить значение ключа:
obj[key];
добавить пару ключ-значение:
obj[key] = value;
потому что нет такого понятия как встроенный ассоциативные массивы в JavaScript. Вот почему это плохо.
в самом деле, когда вы используете что-то вроде :
theArray["a"] = "hello, world!";
Он просто создает свойство под названием " a "и установить его значение" Привет, мир!". Вот почему длина всегда равна 0, и почему выход
alert(theArray)
пусто.надеюсь, что это помогает!
на самом деле, "ассоциативный массив" - это почти так же, как "массив-как объект" в ECMAScript. Даже
Arrays
являются объектами в ECMAscript, только за исключением цифровых клавиш (которые все еще являются строками в фоновом режиме), a.length
свойство вместе с некоторыми унаследованными методами отArray.prototype
.Итак, хэш perl и объект ECMAscript ведут себя аналогично. Вы можете не знать, что вы можете получить доступ к свойствам объекта не только через точку, но и с помощью скобок и строк, как
var myObj = { foo: 42 }; myObj.foo; // 42 myObj['foo']; // 42
зная, что вы также можете использовать ключи с
.
var myObj = { }; myObj['hello.foo.world'] = 42;
конечно, вы можете получить доступ к этому разделу только с скобочная нотация.
можно использовать
.
в именах ключей на объектах JS (ака ассоциативные массивы), если вы хотите, они принимаются без проблем. Незначительным недостатком является то, что вы не можете использовать ярлыки с пунктирными клавишами, напримерvar x = {}; x['hello'] = 'there'; alert(x.hello);
вполне приемлемо и появится предупреждение с " Там " в нем. Но если вы используете пунктирное имя:
var x = {}; x['this.is'] = 'sparta'; alert(x.this.is);
не получится, так как Javascript будет искать атрибут с именем
this
в объекте x, который не существует. Есть толькоthis.is
атрибут.
нет ассоциативного массива, это просто объект.
foo.bar; // Equivalent to... foo["bar"]; // Looks like associative array.
для удобства использования данных, не должно быть никакой разницы между объектом и массив. Вы можете думать об этом как об объекте или как об ассоциативном массиве. В конце концов, вы можете просто думать обо всем как данные.
для PHP, [ ] принимает 0, 1 или более элементов (массив), и это называется ассоциативный массив. Это Json в PHP пальто:
$data = ["message"=>[ "id"=>405, "description"=>"Method not allowed.", "detail"=>[]], "object" => []];
Для Javacript, { } принимает 0, 1 или более элементов (массив), и это называется объект. Этот формат данных-Json:
data = {"message": { "id":405, "description":"Method not allowed.", "detail" : {}}, "object" : {}};
Я просто называю их данные. Самый простой способ описания данных -Json, или его варианты.