请告诉我为什么这个对象迭代器只允许记录一次

Please tell me why does this object iterator just allows logging one time

let str = '<span class="my"> <var suv="inn">';

let regexp = /<(([a-z]+)\s*([^>]*))>/g;

let result = str.matchAll(regexp);
console.log(result[0]);
console.log(result);
//It is an iterable object'
 
console.log("Array from method");
var a = Array.from(result);
console.log(a[0]);
console.log(a[1]);

console.log("for loop method");
for (let value of result){
console.log(value);
}

我们可以看到,当我们首先放置 ArrayFrom 方法时,它记录了值但 ForLoop 方法没有。

let str = '<span class="my"> <var suv="inn">';

let regexp = /<(([a-z]+)\s*([^>]*))>/g;

let result = str.matchAll(regexp);
console.log(result[0]);
console.log(result);
//It is an iterable object'

console.log("for loop method");
for (let value of result){
console.log(value);
}

console.log("Array from method");
var a = Array.from(result);
console.log(a[0]);
console.log(a[1]);

同样,当我们首先放置 ForLoop 方法时,它会记录值,但 ArraFrom 方法不会。

为什么不是两种方法都在一种方法记录后记录。
(我真的不知道如何提出我的问题,我真的希望我很清楚!)

似乎正在发生的事情是,在迭代器的每次进展之后,当前项将从人造数组中删除,使迭代器为空。

如果你在 for...of 循环之前坚持 console.log(Array.from(result).length)length 将是 2 并且人造数组将被 Array.from() 清空,所以for...of 循环 returns 没有。如果连续两次输入 console.log(Array.from(result).length),结果将是 2,然后是 0

如果您之前没有调用 Array.from(result).length,但在 for...of 之后只调用一次,则 length 也将是 0,因为它被清空了for...of.

This is expected behavior.