【问题标题】:Confused of the type of return value of `RexExp.prototype.exec`对 RegExp.prototype.exec 的返回值类型感到困惑
【发布时间】:2019-04-28 03:50:12
【问题描述】:

我发现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 ]

【问题讨论】:

    标签: javascript arrays regex


    【解决方案1】:

    它是一个关联键值对的数组吗?

    完全正确。它是一个普通数组,已分配了某些附加属性。由于数组是对象,除了通常的数字索引之外,它们还可以具有任意键值对,尽管您应该几乎永远不会在正常的干净代码中看到这一点(正则表达式匹配是我能做到的唯一例外)想想数组对象在哪里有额外的非标准属性)。

    (旁注:为避免在正则表达式中双重转义(常见)反斜杠,请考虑始终使用正则表达式文字,并且仅在需要dynamically create a pattern from a variable 时使用new RegExp,例如const pattern = new RegExp('foo' + myVar + 'bar')

    【讨论】:

      猜你喜欢
      • 2010-10-19
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多