typescript 在用let解构赋值后,我不能重新赋值其中的一个变量吗?

34gzjxbg  于 2023-04-07  发布在  TypeScript
关注(0)|答案(1)|浏览(254)

在实践NestJS..
在Controller中使用了DTO,我通过解构赋值为它们声明了3个变量。在这个时候,我在声明测试时使用了'let'关键字。

export class SignUpDto {
  name: string;
  email: string;
  readonly password: string;
}
@Post()
  async signUp(@Body() signUpDto: SignUpDto): Promise<void> {
    let { name, email, password } = signUpDto;
    console.log(1, name);
    if (!name || !email || !password) {
      throw new BadRequestException();
    }
    name = 'new name';
    console.log(2, name);
    console.log(signUpDto.name);
    await this.usersService.signUp(signUpDto);
  }

在声明之后,'name'的值与REQ的body.('username ')相同,所以我将其值改为' newname '
然后,当我只记录'name'变量时,'name'变量在控制台中打印'new name'。但是,当我记录'signUpDto.name'时,它仍然打印'username'。

// console.log(1, name);
1 username

// console.log(2, name);
2 new name

// console.log(signUpDto.name);
username

// the result returned from usersService
UsersService { name: 'username', email: 'user@email.com', password: 'PassWord' }

我看过官方文件,但找不到正确的理由。
我的一个想法是,它们存储在内存中的不同位置,因此它们打印不同的值。
你能告诉我这是什么意思吗?我不知道为什么'name'的值没有改变。

5lhxktic

5lhxktic1#

当你通过let { name } = body解构对象时,你正在创建一个名为name的新变量。这个值是通过值访问的,而不是通过引用访问的,所以当你修改它时,它不会修改原始对象的值。

相关问题