Различие между объектом и хешем?

Наиболее часто используемая фраза, "мы все соглашаемся взрослые здесь". Путем предварительного ожидания (скрываются) одинарное подчеркивание (не представляют) или двойное подчеркивание, Вы говорите пользователю Вашего класса о предположении участника, чтобы быть 'частными' в некотором роде. Однако Вы доверяете всем остальным, чтобы вести себя ответственно и уважать это, если у них нет неопровержимого довода не к (например, отладчики, кодируйте завершение).

, Если у Вас действительно должно быть что-то, что является частным, тогда можно реализовать его в расширении (например, в C для CPython). В большинстве случаев, однако, Вы просто изучаете Pythonic способ сделать вещи.

56
задан Matthew Simoneau 15 March 2018 в 16:48
поделиться

10 ответов

Их просто нет. Все трое буквально равны.

57
ответ дан 22 September 2019 в 14:05
поделиться

Это разные системы обозначений, которые можно использовать как взаимозаменяемые. Во многих ситуациях использование синтаксиса скобок [] может быть более привлекательным, например, при ссылке на объект с переменной.

var temp  = "kid";
var obj = new Object();
obj[temp] = 5; // this is legal, and is equivalent to object.kid
obj.temp = 5; // this references literally, object.temp
18
ответ дан 22 September 2019 в 14:05
поделиться

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

4
ответ дан 22 September 2019 в 14:05
поделиться

Они одинаковы.

вы можете использовать их как взаимозаменяемые.

3
ответ дан 22 September 2019 в 14:05
поделиться

Думаю, это все равно. Третья версия могла использоваться с именами динамических свойств. Первый - самый короткий для записи.

3
ответ дан 22 September 2019 в 14:05
поделиться

Они такие же. Так же, как [] и new Array () - одно и то же.

Для получения дополнительных сведений об основных типах JavaScript см. Справочник по MDC Core JavaScript 1.5 .

Если вам нужно доказательство того, что {} совпадает с new Object () :

Object.prototype.helloWorld = function () { alert('Foo!'); };
var a = new Object();
var b = {};
a.helloWorld();
b.helloWorld();

!!! ПРЕДУПРЕЖДЕНИЕ АКТУАЛЬНОЕ ПРЕДУПРЕЖДЕНИЕ !!! Никогда и никогда не назначать свойство prototype типа Object в производственном коде. Вы загрязните все глобальное пространство имен.

2
ответ дан 22 September 2019 в 14:05
поделиться

На самом деле в JavaScript нет ничего, что называется «хеш-таблицей» или «хеш-картой». Объект в JavaScript ведет себя как «хэш» [объекты в JavaScript - это просто свойства типа ключ / значение], и отсюда возникает путаница.

0
ответ дан 22 September 2019 в 14:05
поделиться

Фактически, каждый объект в JavaScript ЯВЛЯЕТСЯ хешем. Это хеш свойств и методов объекта. Фактически, все в Javascript является хешем (т.е. списком пар имя / значение).

Каждый раз, когда вы вызываете метод объекта, свойство или просто ссылаетесь на любую переменную, вы выполняете внутренний поиск хэша.

5
ответ дан 22 September 2019 в 14:05
поделиться

Технически они одинаковые. При написании кода можно легко сделать myobject['someproprty' + 'somethingElseConcatenated', чего нельзя сделать при использовании "точечной нотации" - myobject. Someproperty - это все, что можно сделать.

Дуглас Крокфорд, один из авторов ECMA-скрипта, предлагает не использовать var a = новый синтаксис Object() по какой-то причине я почему-то не совсем уловил. В любом случае, стоит посмотреть его презентацию, если вам интересно (она состоит из нескольких частей, первая находится здесь http://video.yahoo.com/watch/111593/1710507)

.
1
ответ дан 22 September 2019 в 14:05
поделиться

В других языках, таких как Java и C#, в качестве ключа в хэш-таблице/хэш-карте можно использовать любой объект (не только строку или число), чего нет в JavaScript: ключи просто преобразуются в строки.

var h = {}, k = {};
h[k] = "One";
alert( h[ "[object Object]" ] ); // Alerts "One"

В качестве ключей можно использовать произвольные объекты, в этом случае можно использовать что-то вроде jshashtable.

Отказ от ответственности: я написал jshashtable.

.
6
ответ дан 22 September 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: