魔方盲拧记忆生成器数组更新异常及相等判断失效求助
问题1:控制台输出正确记忆内容,但edges数组看似未发生变化
这是浏览器控制台的引用类型展示特性导致的:
- JS中数组属于引用类型,
console.log(edges)时,控制台并不会立即生成数组的完整快照,而是保存了对数组内存地址的引用。当你后续展开控制台中的数组时,显示的是数组当前的内存状态,而非调用console.log时的状态。 - 若要查看调用
console.log时数组的真实内容,可以打印数组的深拷贝快照:
这样就能看到打印时刻数组的实际值,确认数组是否真的被修改。console.log(JSON.parse(JSON.stringify(edges)));
问题2:
edges == edgesOriginal判断无法触发“yes”输出 JS中数组是引用类型,==和===运算符比较的是两个变量的内存引用地址,而非数组的内容。即使两个数组的元素完全一致,只要它们不是指向同一个内存地址的引用,比较结果就会是false。
要判断两个数组内容是否一致,可采用以下方法:
- 遍历比较每一项(最可靠,支持复杂场景):
function arraysEqual(a, b) { if (a.length !== b.length) return false; for (let i = 0; i < a.length; i++) { if (a[i] !== b[i]) return false; } return true; } // 使用示例 if (arraysEqual(edges, edgesOriginal)) { console.log("yes"); } - JSON序列化比较(适合元素为字符串、数字等简单类型的数组):
注意:如果数组包含if (JSON.stringify(edges) === JSON.stringify(edgesOriginal)) { console.log("yes"); }undefined、function、Symbol等无法被JSON序列化的类型,该方法会失效。
内容的提问来源于stack exchange,提问作者Evman
相关产品推荐
相关产品推荐

