Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему в JavaScript не изменили простую и очевидную штуку? (https://javascript.ru/forum/misc/79677-pochemu-v-javascript-ne-izmenili-prostuyu-i-ochevidnuyu-shtuku.html)

voraa 07.04.2020 17:20

Цитата:

Сообщение от jaroslav.tavgen (Сообщение 522405)
Зачем, например, нужен эффект, который я описал в предыдущем посте?

Это не эффект, а реакция на синтаксическую ошибку в регулярном выражении

"aaab".match(/a{,2}/g)
"aaab".match(/a{*,;}/g)

Дадут тоже самое.

voraa 07.04.2020 17:40

Цитата:

Сообщение от jaroslav.tavgen (Сообщение 521606)
Или вообще отрицательные индексы как в Питоне. В splice они есть, а в обычной индексации массива - нет.

В javascript вообще нет такого понятия, как индекс массива. Есть свойства объекта. Они задаются строками (ну еще Symbol).

Paguo-86PK 07.04.2020 17:48

Eсли бы стандартом стал бы vb-script, я бы до сих пор сидел бы в Си и мне начхать было на тот же HTML5 с его WebGL…:-E

laimas 07.04.2020 17:53

Цитата:

Сообщение от voraa
В javascript вообще нет такого понятия, как индекс массива

Это почему? Нет ассоциативных массивов, это да, но массивы в JS имеют индексы.

voraa 07.04.2020 18:07

Цитата:

Сообщение от laimas (Сообщение 522413)
Это почему? Нет ассоциативных массивов, это да, но массивы в JS имеют индексы.

Какие индексы?
Массивы - это прежде всего объекты. Ну с некоторыми дополнительными прибамбасами (экзотические объекты). Но объекты.
Индексы - это строки. Все числовые индексы преобразуются в строки и обрабатываются, как обычные свойства объекта.

let a=[1,2,3]

console.log (a[2]); // 3
console.log (a['2']); // 3
console.log (a['02']); // undefined '2' !== '02'

a['1.5'] = 15
console.log (a[1.5]) // 15

a[-1] = -1
console.log (a[-1]) // -1
console.log (a['-1']) // -1

voraa 07.04.2020 18:30

Цитата:

Сообщение от laimas (Сообщение 522413)
Нет ассоциативных массивов, это да,

А что в Вашем понимании ассоциативный массив?
Чем обычный объект не ассоциативный массив?
Только, что length нет. Да не особо и нужен.
Весь "ассоциативный массив" обработать можно через for in.

laimas 07.04.2020 19:03

Цитата:

Сообщение от voraa
Какие индексы?

Массивы в JavaScript индексируются с нуля: первый элемент массива имеет индекс, равный 0, а индекс последнего элемента равен значению свойства массива length минус 1.

Это из одного из талмутов, другого суждения я ни где не встречал. А крутить и вертеть словами можно как угодно, о тех же "ассоциативных", сравнивая их с понятиями "свойства".

voraa 07.04.2020 19:25

Цитата:

Сообщение от laimas (Сообщение 522416)
[i]А крутить и вертеть словами можно как угодно, о тех же "ассоциативных", сравнивая их с понятиями "свойства".

Это не слова. Это работающие операторы javascript.
let a=[];
a['1.5'] = 15
console.log (a[1.5]); // 15

a[-1] = -1
console.log (a[-1]); // -1
console.log (a['-1']); // -1

Единственная экзотичность объекта Array связана с обработкой свойства length.
В остальном это обычный объект, где даже целочисленные свойства представлены строками.

laimas 07.04.2020 19:58

И к чему это все? Что значит обращение к элементу массива array[3], это по его индексу или есть иной термин, о котором знаете только вы?

Можно мусолить о различиях столько, что на диссертацию хватит, но есть понятие индекс, все остальное это уже словоблудие. Ибо если сравнивать тот же РНР с JS, в первом ассоциативный массив имеет ключи и никто, и ни когда не назовет их свойствами. В отличие от JS в РНР можно всегда получить третий символ строки как string[2] так как во внутреннем представлении в РНР строка это массив, а в JS нет. Но сколь лясы не точи, что в РНР, что в JS, это строковый тип данных. Вот так и с индексами, определят иное понятие этого тогда другое дело.

voraa 07.04.2020 20:04

Цитата:

Сообщение от laimas (Сообщение 522418)
В отличие от JS в РНР можно всегда получить третий символ строки как string[2]

Вы, наверно, чего то не знаете
console.log('string'[2]); // r


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