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

let变量赋值差异疑问:直接赋值与扩展运算符赋值为何结果不同?

问题解答

两种赋值的差异跟let无关,核心是对象的引用传递与浅拷贝的区别:

  • 当你写 let s = validate; 时,这是引用赋值:s和validate指向内存中同一个对象。此时对s的属性操作(比如delete s['location']),本质是直接修改那个共享的对象,所以validate.location也会变成undefined。
  • 当你写 let s = { ...validate }; 时,这是浅拷贝:扩展运算符会把validate的所有可枚举属性复制到一个新的空对象里,s是一个独立的新对象,和原validate没有关联。此时删s的属性只会影响s自己,原validate不受任何影响。

哪怕把let换成var或const,两种赋值方式的结果也完全一样——差异的根源是对象的传递机制,和变量声明关键字无关。

内容的提问来源于stack exchange,提问作者Berke Türk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:44:51