请告诉我为什么这个对象迭代器只允许记录一次
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
.
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
.