我注意到正则表达式matchAll()
的返回值非常特殊。例如:['test1', 'e', 'st1', '1', index: 0, input: 'test1test2', length: 4]
,其中前几个元素可以由索引引用,其余的可以由名称引用。这仍然是Array
,我怎么能自己创建一个人?
答案 0 :(得分:2)
从正则表达式.exec
命令获得的内容确实是一个数组,但是它还分配了一些非标准属性:
const re = /fo(o)/;
const str = ' foo bar';
const match = re.exec(str);
// Look at the result in the browser console, not the snippet console:
console.log(match);
const re = /fo(o)/;
const str = ' foo bar';
const match = re.exec(str);
// Yes, it's still an array:
console.log(Array.isArray(match));
结果:
0: "foo"
1: "o"
groups: undefined
index: 1
input: " foo bar"
length: 2
通过将数组的属性分配为数组的对象就可以达到相同的效果,就好像该数组是一个对象(从技术上来说就是这样):
const arr = ['foo', 'o'];
arr.groups = undefined;
arr.index = 1;
arr.input = " foo bar";
// Look at the result in the browser console, not the snippet console:
console.log(arr);
在几乎所有其他情况下,拥有或分配数组的任意非整数属性是非常奇怪的事情(不是在干净的代码中应该看到的事情)。