Сообщение от x-yuri
|
это Dmitry A. Soshnikov про функции в качестве ключей упомянул
|
Нет, об этом я не говорил. Я говорил про то, что ключ может содержать функцию в качестве
значения. И это было сказано на следующее предположение:
Сообщение от x-yuri
|
Если же переменная обладает поведением - то это объект
|
И я просто показал на примере Питона (да и в JS так же), что "переменная" является словарем (хэшем), хоть и "обладает поведением" (т.е. имеет функцию по некоторому ключу). Хотя, в Питоне так же - все, если говорить неделимо, является объектом.
Сообщение от x-yuri
|
т.е. дело не в том, что в строку преобразовать можно, а в том, что "ключом в хеше может быть все, что угодно"
|
Не просто "все, что угодно", а "все, что угодно, что хэшируемо" (и то - на уровне реализации). И тоже - говорил в данном пункте лишь в теории (но на примере Питона). JS это не касалось. В JS ключами могут быть только строки (ключи Array'я - тоже к строкам приводятся).
Сообщение от x-yuri
|
замечательно, меня это не интересует, не представляю задачи, в которой это может понадобится
|
Да, прикладных задач эта дискуссия вряд ли коснется
здесь больше теоретический уклон.
Сообщение от x-yuri
|
т.е. речь о том, стоит ли строго придерживаться терминологии или стоит избегать лишних деталей (краткость сестра таланта) ;-)
|
Терминологии, несомненно, придерживаться стоит, причем, это и поможет избежать лишних деталей.
Чтобы подытожить, небольшая памятка по терминологии и основным принципам:
1. в JS есть объекты и примитивы;
2. примитивы при выполнении специфических операций преобразуются в
объекты;
3. исходя из 2) можно образно говорить, что "все в JS - объекты", однако, помнить, первые два пункта и знать, что пункт 3) - образный.
4. любой объект-контейнер может быть назван ассоциативным, поскольку может содержать пары "ключ => значение"
5. помнить, что ввиду делегирующей прототипной модели - ассоциация не точная, поэтому пункты 4 и 5 вообще употреблять не нужно
(Хотя, тогда и в Питоне надо идти спрашивать, почему dict обособили от остальных объектов; там, как уже было показано, та же неоднозначность).
6. объекты, конкретно порожденные от конструкций
Object, new __конструктор__ и {} (где __конструктор__ - объект-функция) принято (и согласно терминологии ECMA) называть
объектами
7. объекты, порожденные от конструкций
Array и [] принято (и согласно терминологии ECMA) называть
массивами
8. объекты, порожденные от конструкций
function и Function принято (и согласно терминологии ECMA) называть
функциями или
методами
10. согласно пункту 3), пункты 6), 7) и 8) можно называть
объектами; это тоже будет верно, но уже будет более теоретический уклон, поскольку, обычно, в соответствующих местах, употребляются понятия из 6), 7) и 8)
11. если разговор не теоретический, а прикладной, никто не съест, если {} будет назван "ассоциативным массивом" / "хэшем" (или еще чем-то, услышанным в альтернативной технологии). Главное, опять, помнить и знать, - с таким успехом, все объекты являются "ассоциативными" и
идеология в JS иная. Поэтому, чтобы "избежать лишних деталей", - лучше использовать лаконичную терминологию JS.
12. "Ассоциативный массив", "Разреженный массив", "Хэш-таблица" и т.д. - теоретические абстрактные понятия и структуры, стоящие выше конкретных технологий (JS, Python, Ruby, PHP и т.д.), поэтому однозначное использование этих определений - применительно к конкретным технологиям - размыто и не позволяет дать точную оценку.