You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS中Lodash的_.unset为何会在调用前就修改目标对象?

核心原因

这个现象和 Lodash 的 _.unset 逻辑无关,是浏览器控制台的惰性求值特性导致的认知偏差:

  • 对于对象、数组这类引用类型的值,console.log 执行时不会输出该值当前状态的完整快照,只会在控制台存储对象的内存引用
  • 你调用 _.unset 会直接修改原 this.current_query 指向的对象,当你后续手动点击控制台展开该打印条目时,浏览器才会根据引用读取对象当前的状态(也就是属性已经被删除的空对象),视觉上就像 _.unset 在调用前就已经生效
  • 换成 _.omit 时逻辑完全不同:_.omit 不会修改原对象,而是返回一个全新的对象赋值给 this.current_query,你在赋值前打印的原对象引用指向的内存内容一直没有被修改,展开时自然会显示预期的初始值
验证方案

你可以通过打印瞬时快照的方式验证 _.unset 调用前的真实状态:

on_applied_option_click(field){
  // 序列化后再打印,直接输出当前状态的快照,不受后续修改影响
  console.log(JSON.parse(JSON.stringify(this.current_query))); 
  _.unset(this.current_query, field);
  console.log(JSON.parse(JSON.stringify(this.current_query)));
}

也可以直接打印具体的属性值,避免引用的干扰:

// 执行 _.unset 前打印一定是 500,符合预期
console.log(this.current_query.test);

内容的提问来源于stack exchange,提问作者Luca Reghellin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:45:04