对RexExp.prototype.exec的返回值类型感到困惑

时间:2019-04-28 03:50:12

标签: javascript arrays regex

我发现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 个答案:

答案 0 :(得分:1)

  

它是具有键值对关联的数组吗?

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

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