更新对象时新属性不显示但实际存在,示例代码正常本地代码异常
问题原因:控制台的延迟求值特性
哈哈,这个坑我之前也踩过!你的代码逻辑其实完全没问题,mockOverrides.paths已经成功添加上了"/test"属性,你看到的矛盾现象全是浏览器控制台的小特性搞的鬼。
具体来说,浏览器为了优化性能,对引用类型(比如对象、数组)的console.log采用了延迟求值的策略:
- 当你调用
console.log(mockOverrides)时,浏览器并没有立刻把对象的所有属性转换成字符串显示,而是只保存了一个指向该对象的引用。 - 当你在控制台查看这个输出的折叠状态时,它可能显示的是对象在某个早期阶段的快照;只有当你点击展开对象查看详情时,控制台才会去读取对象的当前状态,这时候你就能看到
"/test"属性了。 - 而
console.log(mockOverrides.paths[endpoint])直接打印的是一个具体的空对象(原始值引用),控制台会立即序列化这个值,所以你能看到正确的结果。
验证方法
如果想确认对象在调用console.log那一刻的真实状态,可以把对象转成字符串再打印,这样就能得到即时的快照:
console.log(JSON.stringify(mockOverrides)); // 这会立刻显示包含"/test"的完整对象结构
另外,用console.table(mockOverrides.paths)也能直观看到所有路径属性,不会有延迟求值的问题。
内容的提问来源于stack exchange,提问作者elad BA
相关产品推荐
相关产品推荐

