Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 26.12.2008, 11:54
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Dmitry A. Soshnikov
А вообще, и String можно назвать ассоциативным, если захотите
Да я-то как раз не хочу, это вы хотите. Просто объект класса Array является ассоциативным массивом настолько, насколько и любой другой объект. И даже примитивные значения плавно превращаются в них, стоит к ним точку приписать. Но говорят почему-то всегда только про Array.
Ответить с цитированием
  #12 (permalink)  
Старый 26.12.2008, 13:37
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Kolyaj
Просто объект класса Array является ассоциативным массивом настолько, насколько и любой другой объект
если в теории структур - а почему бы и нет?

Если в терминологии ECMA - еще раз повторю - когда надо будет беседовать исключительно в рамках ECMA, поверьте, - я придерживаюсь этих рамок. Но, если Вам интересны реализации этих определений - в абстрактных философских рассуждениях - можно и отклоняться от терминологии (при этом информация также будет верная).

А вообще, если Вы загляните в исходники реализаций ECMA (например, в SpiderMonkey), то увидите, что понятия hash, hashTable, map (при создании нативных объектов) - там фигурируют.
__________________
Тонкости ECMAScript
Ответить с цитированием
  #13 (permalink)  
Старый 26.12.2008, 14:00
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Dmitry A. Soshnikov
А вообще, если Вы загляните в исходники реализаций ECMA (например, в SpiderMonkey), то увидите, что понятия hash, hashTable, map (при создании нативных объектов) - там фигурируют.
Кто ж спорит-то? Только зачем называть их ассоциативными массивами? Массив предполагает, что, как минимум, можно узнать без извращений количество элементов в нем и можно легко перебрать его элементы. Про хэши, тем более яваскриптовые, такого не скажешь.
Ответить с цитированием
  #14 (permalink)  
Старый 26.12.2008, 14:19
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Kolyaj
Только зачем называть их ассоциативными массивами?
ну "ассоциативный массив" - это более общее теоретическое понятие. А вот реализация этой теории может быть построена на хеш-таблицах. При этом стандартными операциями для ассоциативных массивов являются лишь добавление (obj.newKey = 10), поиск (for (var k in oj) { if (bla-bla)}) и удаление (delete obj.someKey).
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 26.12.2008 в 14:25. Причина: newKey;) - в смайлик превратилось
Ответить с цитированием
  #15 (permalink)  
Старый 26.12.2008, 14:26
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Если брать такое определение, то конечно да. Просто хэши в js не похожи на ассоциативные массивы в других языках.

Сообщение от Dmitry A. Soshnikov
поиск (for (var k in oj) { if (bla-bla)})
Поиск в данном случае это obj.findKey.
Ответить с цитированием
  #16 (permalink)  
Старый 26.12.2008, 14:32
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Kolyaj
Поиск в данном случае это obj.findKey.
почему? поиск значения по ключу? или определение вхождения ключа в структуру?
__________________
Тонкости ECMAScript
Ответить с цитированием
  #17 (permalink)  
Старый 26.12.2008, 14:40
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Kolyaj
Это для похапэшников так пишут, чтобы доходило лучше
кстати, в php разницы между массив и ассоциативный массив нет (на уровне исходников - тоже хеши); там все - ассоциативный массив (но за размытие этих рамок пришлось в некоторых моментах пожертвовать)
__________________
Тонкости ECMAScript
Ответить с цитированием
  #18 (permalink)  
Старый 26.12.2008, 15:11
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

{} - объект, [] - массив, function - функция - упрощённые термины, которыми оперирует (и правильно делает) большинство, а иначе будет:

function F(x) {
    var y = [];
    for (var i in x) {
        y[y.length] = x[i];
    }
    return y;
}

// передал в хэш! ассоциативный массив! и получил обратно объект!
F({a: 'preved', b: 'medved'});
Ответить с цитированием
  #19 (permalink)  
Старый 26.12.2008, 16:30
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

> // передал в хэш!

F =)

> ассоциативный массив!

{} =)

> и получил обратно объект!

[] =)

Забавная каша =) и вместе с тем, получается, верная. Ну а что делать, если все это - нативный объект, который может содержать пары "ключ => значение"?

Сообщение от Zeroglif
упрощённые термины
Почему упрощенные? Это нормальные термины стандарта, который имеет уже свои абстрактные структуры, соответствующие этим терминам (реализация этих структур остается за кадром (по идее; но кому захочется посмотреть - увидит там эти хеши)).

При этом рассуждать об этом имеет только смысл тогда, когда уже есть представление о терминологии JS и о самом JS; тем, кто начинает знакомство с JS, описание в альтернативной терминологии либо поможет быстрее понять (но тогда надо четко подчеркивать, что мы используем терминологию не из ECMA), либо (что хуже) - может сделать неправильным понимание идеологии JS.
__________________
Тонкости ECMAScript
Ответить с цитированием
  #20 (permalink)  
Старый 26.12.2008, 23:54
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Dmitry A. Soshnikov
Забавная каша =) и вместе с тем, получается, верная.
Хочу, однако, предостеречь всех, кто будет читать этот мой пост (и возможно, воспримет (ну, а вдруг!) его буквально). "Верная" в данном случае подразумевает соответствие объектов JS определенной теоретической структуре данных (ассоциативный массив) и касается только внутренних реализаций. В самом же JS, несмотря на то, что все это объект, выделяют терминологические понятия "массив" - [], "объект" - {}, "функцию" - function. И, говоря о JS, употребляются именно эти определения; также все три понятия могут быть определены как "объект", поскольку являются таковыми в терминологии ECMA.
__________________
Тонкости ECMAScript
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что означает ошибка "Отсутствует исполняющее ядро ДЛЯ расширения имени файла js" Mattias Общие вопросы Javascript 5 09.04.2018 07:45
Что за конструкция? (из jQuery) Yojik Общие вопросы Javascript 6 22.08.2010 15:46
Что такое "javascript:document.login.submit()" i_live_in_Moscow Общие вопросы Javascript 21 30.09.2008 15:25
Как сделать, что бы изображения пропадали. Dronch Элементы интерфейса 7 28.08.2008 21:55
Что за tagName? partyzan Общие вопросы Javascript 1 24.04.2008 21:29