Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Что означает конструкция ? (https://javascript.ru/forum/misc/2414-chto-oznachaet-konstrukciya.html)

Kolyaj 26.12.2008 11:54

Цитата:

Сообщение от Dmitry A. Soshnikov
А вообще, и String можно назвать ассоциативным, если захотите

Да я-то как раз не хочу, это вы хотите. Просто объект класса Array является ассоциативным массивом настолько, насколько и любой другой объект. И даже примитивные значения плавно превращаются в них, стоит к ним точку приписать. Но говорят почему-то всегда только про Array.

Dmitry A. Soshnikov 26.12.2008 13:37

Цитата:

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

если в теории структур - а почему бы и нет?

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

А вообще, если Вы загляните в исходники реализаций ECMA (например, в SpiderMonkey), то увидите, что понятия hash, hashTable, map (при создании нативных объектов) - там фигурируют.

Kolyaj 26.12.2008 14:00

Цитата:

Сообщение от Dmitry A. Soshnikov
А вообще, если Вы загляните в исходники реализаций ECMA (например, в SpiderMonkey), то увидите, что понятия hash, hashTable, map (при создании нативных объектов) - там фигурируют.

Кто ж спорит-то? Только зачем называть их ассоциативными массивами? Массив предполагает, что, как минимум, можно узнать без извращений количество элементов в нем и можно легко перебрать его элементы. Про хэши, тем более яваскриптовые, такого не скажешь.

Dmitry A. Soshnikov 26.12.2008 14:19

Цитата:

Сообщение от Kolyaj
Только зачем называть их ассоциативными массивами?

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

Kolyaj 26.12.2008 14:26

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

Цитата:

Сообщение от Dmitry A. Soshnikov
поиск (for (var k in oj) { if (bla-bla)})

Поиск в данном случае это obj.findKey.

Dmitry A. Soshnikov 26.12.2008 14:32

Цитата:

Сообщение от Kolyaj
Поиск в данном случае это obj.findKey.

почему? поиск значения по ключу? или определение вхождения ключа в структуру?

Dmitry A. Soshnikov 26.12.2008 14:40

Цитата:

Сообщение от Kolyaj
Это для похапэшников так пишут, чтобы доходило лучше

кстати, в php разницы между массив и ассоциативный массив нет (на уровне исходников - тоже хеши); там все - ассоциативный массив (но за размытие этих рамок пришлось в некоторых моментах пожертвовать)

Zeroglif 26.12.2008 15:11

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

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

// передал в хэш! ассоциативный массив! и получил обратно объект!
F({a: 'preved', b: 'medved'});

Dmitry A. Soshnikov 26.12.2008 16:30

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

F =)

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

{} =)

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

[] =)

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

Цитата:

Сообщение от Zeroglif
упрощённые термины

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

При этом рассуждать об этом имеет только смысл тогда, когда уже есть представление о терминологии JS и о самом JS; тем, кто начинает знакомство с JS, описание в альтернативной терминологии либо поможет быстрее понять (но тогда надо четко подчеркивать, что мы используем терминологию не из ECMA), либо (что хуже) - может сделать неправильным понимание идеологии JS.

Dmitry A. Soshnikov 26.12.2008 23:54

Цитата:

Сообщение от Dmitry A. Soshnikov
Забавная каша =) и вместе с тем, получается, верная.

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


Часовой пояс GMT +3, время: 00:45.