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

使用let解构赋值后,修改变量为何不影响原SignUpDto对象属性?

问题原因解析

这是JavaScript/TypeScript解构赋值的基础特性,和NestJS本身无关。

解构赋值的本质

你执行let { name, email, password } = signUpDto;时,本质上等价于:

let name = signUpDto.name;
let email = signUpDto.email;
let password = signUpDto.password;

也就是把signUpDto对象里的字符串(原始类型)值复制了一份,赋值给了全新的独立变量。这些变量和原对象的属性分属不同内存空间,修改变量的值只会改变这个副本,完全不会影响原对象的对应属性。

原始类型的赋值规则

JavaScript里的原始类型(字符串、数字、布尔等)采用值传递:赋值时会复制一份值给新变量,两个变量互不干扰。只有引用类型(对象、数组)才会传递引用,但你这里解构的是对象内的原始类型属性,所以依然是值复制逻辑。

同步修改原对象的正确方式

如果要让修改同步到signUpDto,直接操作原对象的属性即可:

// 替换解构后修改变量的写法,直接修改原对象
signUpDto.name = 'new name';

关于你的猜测

你的猜测完全正确:变量和原对象属性确实存储在不同内存位置。原始类型的值存于栈内存,解构时复制了栈内的值到新变量,修改新变量只会改变自身栈内的内容,原对象属性仍指向最初的栈值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:42:14