Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114

Строки: массив литералов или тип "string"?

23.11.2018, 21:41. Показов 3939. Ответов 25

Студворк — интернет-сервис помощи студентам
Всем мира!

Возник у нас с товарищем принципиальный вопрос. Суть такая: я ему говорю, что строка - это массив символьных значений. Он говорит, что строка - это строка, т.е. просто "нечто", заключенное в скобки. Я прогаю на С++, он - на js. В С - это массив. Думаю, что в js тоже. Рассудите нас, прошу)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.11.2018, 21:41
Ответы с готовыми решениями:

Каков тип строковых литералов?
Каков тип rvalue строки "Hello"? const char* const или const char* ? const char* some1 = "Hello";

Как преобразовать тип System::String ^ в string? (или что можно сделать ещё для работы перегруженного оператора ostream::operator<<)
Друзья! В обработчик события Click добавил такой код: std::ofstream file_out (&quot;file.txt&quot;); file_out&lt;&lt;...

Нельзя преобразовать тип Tuple<string,string,string,string> к string
Здравствуйте, у меня возникла проблема. При запуске кода, вылезает ошибка &quot;Нельзя преобразовать тип...

25
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
23.11.2018, 22:20
Лучший ответ Сообщение было отмечено Руслан92 как решение

Решение

Руслан92, большинство сред исполнения JS написаны на плюсах.
И для них строка это массив 16битных беззнаковых целых с максимальной длиной (2^53)-1.
Почитать можно в документации - https://www.ecma-international... tring-type

Даже одно то, что к строке можно обратиться как к массиву, должно было натолкнуть на мысль.
JavaScript
1
'abcdef'[3] // d
1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
23.11.2018, 22:23  [ТС]
благодарю, рассудили!
0
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
23.11.2018, 22:24
Руслан92, не за что, легкого компила
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
24.11.2018, 08:25
Руслан92, товарищ прав.
В последний раз строка в JS была грубо говоря непрерывным массивом символов в IE7 насколько помню.
После этого в современных браузерах строка превратилась во внутреннем представлении в некий StringBuilder, позволяющий не создавать новый массив символов после конкатинации строки с другой строкой.
И с тех пор идут обсуждения, надо ли вообще в JS вводить штатный тип StringBuilder, если приращение строки само по себе уже оптимизировано.

То есть именно язык JS не раскрывает внутреннюю сущность строки. Теоретически каждый JS-движок может хранить строку в различных представлениях.

Добавлено через 5 минут
А извне можно обратиться к каждому элементу строки по индексу в строке. И строка имеет свойство length. То есть внешне ведет себя как массив якобы непрерывно расположенных символов.
0
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
24.11.2018, 11:59
amr-now, опять фантазируете
Цитата Сообщение от amr-now Посмотреть сообщение
превратилась во внутреннем представлении в некий StringBuilder, позволяющий не создавать новый массив символов
Вот исходники V8 к примеру -
https://chromium.googlesource.... builder.cc , https://chromium.googlesource.... ring-inl.h
Если уж документацию Вы упорно отказываетесь читать, может код Вам понятнее будет.

Добавлено через 5 минут
Исходники Mozilla - https://dxr.mozilla.org/mozill... String.cpp
https://dxr.mozilla.org/mozill... String.cpp

И там, и там работа с векторами

Исходники сафари (webkit), та же фигня-
https://trac.webkit.org/browse... rev=138530
https://trac.webkit.org/browse... rev=138530
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
24.11.2018, 13:41
Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
Даже одно то, что к строке можно обратиться как к массиву, должно было натолкнуть на мысль.
Вы забываете, что строка иммутабельна. Вы не сможете заменить в строке отдельный символ так, чтобы это остался тот же объект. Так что в JS String - это отдельный тип.
2
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
24.11.2018, 14:14
j2FunOnly,
Цитата Сообщение от j2FunOnly Посмотреть сообщение
JS String - это отдельный тип.
никто с этим не спорит.
Но при реализации этого типа в движке, сделать это
Цитата Сообщение от j2FunOnly Посмотреть сообщение
иммутабельна
никто не мешает.
0
 Аватар для Camdee
1 / 1 / 0
Регистрация: 24.11.2018
Сообщений: 6
24.11.2018, 14:19
мне кажется это, все таки, строка
0
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
24.11.2018, 14:31
Да ребят, ну как хотите, так и думайте Каждый волен на это и это прекрасно
Я привел документацию и исходники к своим словам. Сделать сущность иммутабельной не составляет труда.
Что-то типа
C++ (Qt)
1
2
3
4
5
6
7
template <typename Str, typename Pred>
std::vector<Str> vector_copy_if(std::vector<Str> const & vec, Pred && pred)
{
  std::vector<Str> result;
  std::copy_if(vec.begin(), vec.end(), std::back_inserter(result), pred);
  return result;
}
Кто-то с этим не согласиться. Хорошо.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
24.11.2018, 16:18
Руслан92, в js строка -- это массивоподобный объект, принципиально отличающийся от массива тем, что его нельзя изменить
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
24.11.2018, 23:44
Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
большинство сред исполнения JS написаны на плюсах.
Большинство - значит не все? А как быть с остальными? Ну с теми, которые написаны (или могут быть написаны) на языках, для которых строка - это ни разу не массив? Это как-то влияет на интерпретацию строки в JavaScript? Вот, например, напишет кто-нибудь движок на языке, в котором строка - это никакой не массив, а, скажем, пердокулос, будет ли это означать, что и в явакрипте строки тоже станут немного пердокулос или все же мы будем их интерпретировать исходя из того, что большинство все-таки написано на плюсах, а JavaScript - язык демократический, так что как скажет большинство так и будет?
Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
Даже одно то, что к строке можно обратиться как к массиву, должно было натолкнуть на мысль.
На какую? Лично меня это наталкивает только на одну мысль: в этом языке массив - не единственный тип, поддерживающий индексацию элементов посредством такого синтаксиса. Нет, ну, конечно, можно массивами называть любые коллекции, или любые типы, поддерживающие такой синтаксис, но, я не думаю, что для этого есть основания.
Цитата Сообщение от j2FunOnly Посмотреть сообщение
Вы забываете, что строка иммутабельна. Вы не сможете заменить в строке отдельный символ так, чтобы это остался тот же объект. Так что в JS String - это отдельный тип.
А если бы можно было, это сделало бы его тем же самым типом? Если два разных типа в каких-то ситуациях ведут себя сходным образом, это делает их одним типом?
Цитата Сообщение от Camdee Посмотреть сообщение
мне кажется это, все таки, строка
А я в этом просто уверен ))
Цитата Сообщение от kalabuni Посмотреть сообщение
в js строка -- это массивоподобный объект
Тоже спорный вопрос. Если она предоставляет возможность посимвольного перечисления и индексации, то по большому счету это даже не делает ее типом коллекции. Строка в JavaScript не является коллекцией символов, просто потому, что в этом языке даже нет встроенного типа, представляющего отдельный символ, как это есть в языках, в которых строка действительно может быть интерпретирована как массив или вообще таковым и является. Отдельный символ здесь - это тоже строка. То есть, если следовать этой логике, то символ - это тоже массив из одного элемента, причем этот элемент тоже является массивом и так до бесконечности. Ну хрень ведь получается.
1
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
25.11.2018, 00:54
Цитата Сообщение от diadiavova Посмотреть сообщение
Тоже спорный вопрос.
отсылаю к https://developer.mozilla.org/... escription -- см. там второй абзац, строки там названы не только "массивоподобными" объектами, но даже и "единственными родными"

Цитата Сообщение от diadiavova Посмотреть сообщение
Ну хрень ведь получается.
если насчёт ваших рассуждений, то да, согласен
0
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
25.11.2018, 01:07
diadiavova, здравствуй
Все доводы, что я приводил, сделаны на основе того, что написано в документации и в сорцах.
Да, в JS строка - это примитивный тип String блаблабла. Но под капотом, в тех средах исполнения, чьи источники я приложил, они обрабатываются как массивы. Ибо в плюсах строка, ВНИМАНИЕ - это массив.
Согласно ECMAScript - стандарт, на основе которого реализован JS, строка должна быть последовательностью 16UInt.
Пруфы дал выше.
Про другие среды исполнения, в которых интерпретатор реализован на другом языке, пока к сожалению у меня нет информации.
Ну вот, опять моя мебель тлеет.
Всё, даю себе зарок, больше не отвечать на в темах, подобной этой. Опять спор бессмысленный.
1
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
25.11.2018, 01:49
Цитата Сообщение от kalabuni Посмотреть сообщение
отсылаю к
С документацией спорить не буду, однако укажу, что вопрос я обозначил именно как спорный. Не настаивал. Что считать подобным? Можно ведь критерии подобия задать довольно низкие.

Не по теме:

Могу отослать к изумрудным скрижалям Гермеса Трисмегиста, они вообще утверждают, что все в мире подобно всему.

Цитата Сообщение от kalabuni Посмотреть сообщение
если насчёт ваших рассуждений, то да, согласен
А что с ними не так? Я, если что-то утверждаю, то хоть как-то это обосновываю, а не отвечаю в духе "сам дурак".
Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
diadiavova, здравствуй
Доброй ночи.
Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
Все доводы, что я приводил, сделаны на основе того, что написано в документации и в сорцах.
Если в документации конкретно по языку JavaScript где-то написано, что строка - это массив, то нет вопросов. Но делать какие бы то ни было далеко идущие выводы, исключительно на основании того, как это реализовано на уровне движка - в корне неверно. JavaScript - самостоятельный язык высокого уровня и с его точки зрения, по большому счету, не имеет ровным счетом никакого значения как это реализовано. У него есть своя система понятий, которая может коренным образом отличаться от тех языков, с которыми ты его сравниваешь. Моя критика касалась в первую очередь доводов, которые ты привел. При чем тут сырцы?
Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
Ибо в плюсах строка, ВНИМАНИЕ - это массив.
Ты же там вверху где-то написал, что вектор? ))
Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
Согласно ECMAScript - стандарт, на основе которого реализован JS, строка должна быть последовательностью 16UInt.
А вот там где ты написал, что вот это типа должно наталкивать на мысль, там выражение типа "qwerty"[2] возворащает именно енто самое или все-таки тоже объект String?
Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
Про другие среды исполнения, в которых интерпретатор реализован на другом языке, пока к сожалению у меня нет информации.
Но ведь вопрос же был не о конкретных средах, а в принципе о том, что если такие есть или появятся, как это должно повлиять на сабж?

Не по теме:

Цитата Сообщение от Qwerty_Wasd Посмотреть сообщение
Ну вот, опять моя мебель тлеет.
Мебель подлечил ))

3
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
25.11.2018, 02:15

Не по теме:

diadiavova,

Цитата Сообщение от diadiavova Посмотреть сообщение
Ты же там вверху где-то написал, что вектор? ))
Я написал, что в исходниках строки обрабатываются в качестве векторов.
вектор в С++ - если по простому это динамический массив.
А если следовать документации, то это контейнер, инкапсулирующий в себе динамические массивы.
https://en.cppreference.com/w/cpp/container/vector
https://en.cppreference.com/w/cpp/header/vector

И да, повторюсь, в плюсах строка - это массив. Короче, не придирайся




Не по теме:

Цитата Сообщение от diadiavova Посмотреть сообщение
JavaScript - самостоятельный язык высокого уровня и с его точки зрения, по большому счету, не имеет ровным счетом никакого значения как это реализовано
это просто квинтэссенция наших разногласий.


Не по теме:

Не буду снова начинать нудить, ты и так знаешь, что я не согласен с тобой. Я в свою очередь знаю, что это взаимно


Не по теме:

Оставим так. Я постараюсь больше не писать в такие темы, потому что возникающий спор между нами вводит в ступор новичков. Глупо. У меня корона с головы не упадет - уступить


Не по теме:


Благодарю за мебель

1
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
25.11.2018, 02:36
Цитата Сообщение от diadiavova Посмотреть сообщение
Если в документации конкретно по языку JavaScript где-то написано, что строка - это массив, то нет вопросов.
сами себе противоречите:
в документации по языку JavaScript (ссылку https://developer.mozilla.org/... escription я вам дал) написано, что строка -- это "единственный родной массивоподобный объект", но вы продолжаете настаивать, что это "спорный вопрос"

Цитата Сообщение от diadiavova Посмотреть сообщение
А что с ними не так?
если мне не изменяет память, то одним из 12-ти приёмов литературной полемики у Гашека было именно "доведение до абсурда"
ваши рассуждения один в один сходны с рассуждениями дамы из бородатого анекдота:

Не по теме:

мужик случайно толкнул в трамвае женщину
та начала громко возмущаться
мужик остановил её словами "замолчи, рыба!"
женщина начала вполголоса рассуждать:
рыба - это щука,
щука - это зубы,
зубы - это собака,
собака - это сука...
и громко закричала на весь трамвай: "Товарищи, он меня б...ю обозвал!!!

0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
25.11.2018, 02:48
Цитата Сообщение от kalabuni Посмотреть сообщение
сами себе противоречите:
Да нет вообще-то. Я написал, что если написано что строка - это массив, а не "родной и близкий". Разные вещи все-таки. К тому же, как раз сейчас просматриваю спеку, там пока ничего подобного не нашел. При том что мдн - безусловно авторитетный ресурс, тем не менее, когда там написано вместо технических подробностей что-то вроде этого, то лучше все-таки обращаться к единственному нормативному документу за подробностями. Пока я их там не нашел. А спорность как раз-таки и заключается в степени подобия и достаточно ли ее, чтобы приводить в качестве аргумента в контексте сабжа.
Цитата Сообщение от kalabuni Посмотреть сообщение
если мне не изменяет память, то одним из 12-ти приёмов литературной полемики у Гашека было именно "доведение до абсурда"
К чему эти умствования? По существу есть что сказать?
Цитата Сообщение от kalabuni Посмотреть сообщение
ваши рассуждения один в один сходны с рассуждениями дамы из бородатого анекдота:
Чувак, с твоей стороны, я вообще никаких рассуждений не вижу. Тебе когда нечего сказать, ты начинаешь либо тупые анекдоты рассказывать, либо шутки про анус или фекалии отпускать. Верный признак, что дискуссию пора заканчивать.
ПС
И да, я в курсе, что ты ко мне на "ты" не обращался. ))
2
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
25.11.2018, 04:23
Цитата Сообщение от diadiavova Посмотреть сообщение
К чему эти умствования? По существу есть что сказать?
а чем мой Чапек (которого я выше сдуру обозвал Гашеком) хужее вашего Трисмегиста?
или полагаете, что "умствовать" здесь дозволено только вам?
Цитата Сообщение от diadiavova Посмотреть сообщение
Верный признак, что дискуссию пора заканчивать.
ну так вы её и закончили, тем самым чапековским приёмом (добавив к нему собственное хамство):

Прием третий известен под названием Caput canis (здесь: приписывать
дурные качества - лат.). Состоит в искусстве употреблять лишь такие
выражения, которые могут создать об избиваемом противнике только
отрицательное мнение. Если вы осмотрительны, вас можно назвать трусливым ;
вы остроумны - скажут, что вы претендуете на остроумие ; вы склонны к
простым и конкретным доводам - можно объявить, что вы посредственны и
тривиальны ; у вас склонность к абстрактным аргументам - вас выгодно
представить заумным схоластом, и так далее.
удачи вам, поздравьте себя с тем, что "последнее слово в дискуссии осталось за вами"
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
25.11.2018, 09:13
Моя точка зрения совпадает с точкой зрения diadiavova.
Непрерывная последовательность символов в строке JS может быть частным случаем размещения в памяти, но не единственным.
Надо искать не только в спецификации. но и в разнообразных разрозненных статьях товарищей, причастных к разработке языка.
Периодически помелькивают, но сейчас не помню точные ссылки.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.11.2018, 09:13
Помогаю со студенческими работами здесь

Можно ли тип Collection<String> преобразовать в тип ArrayList<String>?
Добрый день ! Можно ли тип Collection&lt;String&gt; преобразовать в тип ArrayList&lt;String&gt; Collection&lt;String&gt; l4 = map.values(); ...

Тип string, ссылочный или примитивный?
Добрый день. До недавнего времени я считал тип &quot;string&quot; ссылочным. Сомнения в мой разум внесло следующее: - В книге &quot;Герберт...

Ввод строки литералов, вывод измененной строки, в зависимости от буквы
Итак, небольшое предисловие:) Сижу на вашем форуме уже год, и он множество раз мне помогал с сишкой, паскалем и пару раз с питоном,...

Строки в стиле С. Тип string
Напишите две функции, выполняющие одинаковые действия: • функцию, использующую только строки в стиле С • функцию, использующую...

Проблема с выводом строки, тип string
После присваивания полю классу mystring случайного значения через метод RandStr (я так случайную строку создаю) произвожу вывод случайных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru