hax.github.com icon indicating copy to clipboard operation
hax.github.com copied to clipboard

V8引擎迭代器bug一则

Open hax opened this issue 5 years ago • 0 comments

{ // code 1
	const [a, b, c, ...d] = test()
	print(d[0], d[1])
}
{ // code 2
	const [a, b, c, d, e] = test()
	print(d, e)
}

上述两段代码显然我们期望结果是一样的。

然而

function test() {
	let i = 0
	return {
		[Symbol.iterator]() {
			return {
				next() {
					return {value: ++i, done: i % 3 === 0}
				},
			}
		}
	}
}

结果 V8 前者返回 4, 5,后者返回 undefined, undefined。显然V8的实现有bug。

其他引擎中,SpiderMonkey、JavaScriptCore、Hermes、engine262 的结果是符合预期的(都是undefined, undefined)。XS 和 Chakra 返回的都是 4, 5 好歹是一致的。

hax avatar Sep 25 '20 04:09 hax