坑: console.log,对象引用机制
const rootNode = this.virtualTree.nzTreeNodeOptions; // 1. 创建引用
console.log(rootNode); // 2. 日志输出energyCategoryNode.children = filterEnergyCategoryNodes(energyCategoryNode.children, energyType); // 3.
this.virtualTree.nzTreeNodeOptions = [energyCategoryNode, buildingAreaNode].filter(node => node); // 4. 核心!!!
这样一段代码,我在调试的时候,发现,控制台输出的是不完全节点,看着反而是过滤后的节点。
问题原因:
对象引用机制
。rootNode 是对 this.virtualTree.nzTreeNodeOptions 的引用- 浏览器控制台特性。 console.log() 瞬间执行完成,仅记录对象引用;控制台展开对象时才实际读取对象内容;展开时显示的是对象的当前状态,不是记录时状态
所以,说后续代码修改了同一对象后,控制台上点开对象就会返回过滤后的结果,
解决:
调试时,使用深拷贝
console.log('记录时状态:', JSON.parse(JSON.stringify(obj)));