[BUG反馈][3.8.6] 循环遍历编译后结果错误

复现代码

import { _decorator, Component, Node } from "cc";
const { ccclass, property } = _decorator;

@ccclass("MainScene")
export class MainScene extends Component {
  protected onLoad(): void {
    const map = new Map([
      ["key1", "value1"],
      ["key2", "value2"],
    ]);
    const values = [...map.values()];
    for (const v of values) {
      console.log(v);
    }
  }
}

以上代码在预览环境能正常输出结果:

但是选择web-desktop构建后输出结果变为:

AI给的问题分析

原因分析:

  1. map.values()返回 MapIterator<string>
  2. 扩展运算符 ... 在某些编译环境下可能被转换为 concat() 方法
  3. [].concat(iterator) 会将迭代器对象本身作为元素,而不是其包含的值
  4. 因此最终数组只包含一个元素: MapIterator 对象
for (const [_, v] of map) {
      console.log(v);
}

要不这样,性能可能还好点

主要不是性能问题, 是上面这种写法会导致编译后的代码是错误的

嗯 是的。哪里有问题 不过感觉不一定会优先解决这种问题 只能换个写法先绕过 慢慢等修改