В JavaScript есть строки, подобные массивам?

Строки в JavaScript имеют свойство длины, например массивы, но у них нет таких методов, как forEach или reduce.

Допустим ли это, что строки - это массивы, подобные объектам?

0
задан 13 August 2018 в 15:04

2 ответа

Термин «подобный массиву» обычно относится к объекту, имеющему свойство целочисленного значения .length и, соответственно, к множеству элементов, хранящихся в свойствах с целыми ключами, так что мы можем получить к ним доступ по индексу, подобному массиву. Строки, безусловно, удовлетворяют этому требованию.

Нет, строки не имеют всех методов, которые имеют массивы. Они не наследуются от Array.prototype, они не являются реальными массивами - они просто похожи на массив. Однако вы можете тривиально преобразовать строку в массив либо с помощью ….split(''), либо Array.from(…).

1
ответ дан 15 August 2018 в 17:01
  • 1
    Хм, теперь я смущен. Вы говорите, что строки похожи на массивы, но @Teemu говорит, что они нет (см. Первый комментарий). – user1941537 13 August 2018 в 17:55
  • 2
    @ user1941537 Нормальные строки не являются объектами (это то, что сказал Teemu), но они по-прежнему похожи на массивы. Когда вы получаете доступ к свойству в примитивном значении, он получает неявное принуждение к временному объекту, хотя – Bergi 13 August 2018 в 18:02

Согласно документации эти функции не существуют (Документация).

Но вы можете добавить функции к прототипу String

// forEach function
String.prototype.forEach = function (f) {
  for (i=0; i < this.length; ++i) {
    f(this[i]);
  }
}


// reduce function
String.prototype.reduce = function (f, start) {
  result = (start == undefined) ? null : start
  for(i = 0; i < this.length; ++i) {
    result += f(this[i])
  }
  return result
}
1
ответ дан 15 August 2018 в 17:01

Другие вопросы по тегам:

Похожие вопросы: