类型错误:无法读取未定义的属性 toString()

时间:2021-07-03 21:16:14

标签: javascript angular typescript

我的 Angular 项目中有一个登录组件,我想在用户登录系统时通过 localStorageService 保存用户 ID。

我的登录组件:

 login(){

    if(this.loginForm.valid){
      let loginModel = Object.assign({},this.loginForm.value)
      this.authService.login(loginModel).subscribe(response=>{
        this.toastrService.success(response.message)
        this.getUser(loginModel.email);
        this.localStorageService.addToken(response.data)
        this.router.navigate([""])
      },responseError=>{
        console.log(responseError)
        this.toastrService.error(responseError.error)
      })
    }
  }

和 LocalStorageService:

 addCurrentUserId(user:User){
    localStorage.setItem("currentUserId",user.id.toString());
  }

当用户登录系统并单击 F12 时,出现此错误:

core.js:6456 ERROR TypeError: Cannot read property 'toString' of undefined
    at LocalStorageServiceService.addCurrentUserId (local-storage-service.service.ts:43)

1 个答案:

答案 0 :(得分:2)

有些错误或者经常很明显! :p

就您而言,问题的答案就在您的鼻子下方: Cannot read property 'toString' of undefined
local-storage-service.service.ts:43

您正在代码的第 43 行调用 user.id.toString() 并且错误告诉您您正在执行的代码正在尝试调用 .toString() ……嗯……一些未定义的东西,并且那个东西是你的user.id
.toString() 调用之前,您的代码中可能发生了您不希望发生的其他事情。

在任何情况下,您还可以通过简单地使用 if 语句来检查用户 ID 是否定义,或者更好的是,您可以使用所谓的 optional chaining。这意味着您的代码将如下所示:user.id?.toString()。如果未定义用户 ID (undefined),则不会调用 .toString(),并且将在您的 undefined 调用中使用 setItem(...) 值。

另外,你真的需要调用 .toString() 吗?