带有一些键控的javascript数组

时间:2019-05-21 00:48:06

标签: javascript

我注意到正则表达式matchAll()的返回值非常特殊。例如:['test1', 'e', 'st1', '1', index: 0, input: 'test1test2', length: 4],其中前几个元素可以由索引引用,其余的可以由名称引用。这仍然是Array,我怎么能自己创建一个人?

1 个答案:

答案 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);

在几乎所有其他情况下,拥有或分配数组的任意非整数属性是非常奇怪的事情(不是在干净的代码中应该看到的事情)。