我发现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 ]
答案 0 :(得分:1)
它是具有键值对关联的数组吗?
完全正确。这是一个普通数组,已分配了某些其他属性。由于数组是对象,因此它们除了通常的数字索引外还可以具有任意键值对,尽管您几乎从不看到普通的干净代码(正则表达式匹配是我唯一的例外)想一想数组对象在哪里还有其他非标准属性。
(旁注:为避免不得不在转义表达式中转义(普通)反斜杠,请考虑一直使用正则表达式文字,并且仅在需要使用dynamically create a pattern from a variable时使用new RegExp
,例如const pattern = new RegExp('foo' + myVar + 'bar')
)