Запутался в типе возвращаемого значения `RexExp.prototype.exec` - PullRequest
1 голос
/ 28 апреля 2019

Я нашел возвращаемое значение RexExp.prototype.exec странно.Возвращенный массив также содержит пары ключ-значение.

> RegExp('foo*','g').exec('table football, foosball')
[ 'foo',
  index: 6,
  input: 'table football, foosball',
  groups: undefined ]

И возвращенное значение может пройти Array.isArray тест, а при передаче на typeof вернется object:

> Array.isArray(RegExp('foo*','g').exec('table football, foosball'))
true
> typeof RegExp('foo*','g').exec('table football, foosball')
'object'

Так что это за тип?

Это массив с ассоциированными парами ключ-значение?Как это:

> var arr = [1]
undefined
> arr.aaa = 2
2
> arr.bbb = 3
3
> arr
[ 1, aaa: 2, bbb: 3 ]

1 Ответ

1 голос
/ 28 апреля 2019

Это массив с ассоциированными парами ключ-значение?

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

(Примечание: чтобы избежать двойного экранирования (общих) обратных косых черт в регулярном выражении, рассмотрите возможность использования литералов регулярного выражения все время и используйте толькоnew RegExp когда вам нужно динамически создать шаблон из переменной , например const pattern = new RegExp('foo' + myVar + 'bar'))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...