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

Angular中对象已初始化但字段仍被检测为undefined问题

问题:Angular中获取User对象phonenumber属性返回undefined,但对象本身显示有数据

在Angular项目中尝试获取User对象的phonenumber属性时,该属性被检测为undefined,但打印整个User对象时,该字段却明确显示有数据。

控制台日志

perfil.component.ts:42 undefined
perfil.component.ts:48 
{recordNumber: '00001A', name: 'Victor Manuel Arenas', dni: '75499109E', birthDate: '2000-12-04', phoneNumber: '678678678', …}
address
: 
"C\\Lorca 31"
birthDate
: 
"2000-12-04"
dni
: 
"75499109E"
email
: 
"victormanuel.arenas@univ.com"
name
: 
"Victor Manuel Arenas"
parking
: 
null
password
: 
"$2a$10$auBcwSsgKBWMTUUFToVb1OklqDP4O0LvW9F7vqWjnVZAGFzOVtfg6"
phoneNumber
: 
"678678678"
profilepic
: 
"profilepic_00001A.jpg"
recordNumber
: 
"00001A"
role
: 
"ALUMNO"

相关代码

检测方法

checking(){
    if(this.sesion.user != null){
      console.log(this.sesion.user.phonenumber);
      if(this.sesion.user.phonenumber === undefined) {
        alert("myProperty value is the special value `undefined`");
      }
    }
    
    console.log(this.sesion.user);
  }

User接口定义

import { Parking } from "./Parking";

export interface User {
    recordNumber: string;
    name: string;
    dni: string;
    birthdate: Date;
    phonenumber: string|null;
    email: string;
    address: string;
    profilepic: string|null;
    role: string;
    password: string;
    parking: Parking;
}

问题原因

JavaScript是大小写敏感的语言,你的代码和接口中使用的是全小写的phonenumber,但后端实际返回的字段是驼峰式的phoneNumber(首字母p小写,N大写),两者名称不匹配,导致访问this.sesion.user.phonenumber时找不到对应属性,返回undefined。

此外,接口中的birthdate和后端返回的birthDate也存在同样的大小写不一致问题。

解决方案

方案一:统一接口与后端字段名(推荐)

修改User接口,将属性名调整为和后端返回一致的驼峰格式:

import { Parking } from "./Parking";

export interface User {
    recordNumber: string;
    name: string;
    dni: string;
    birthDate: Date; // 改为birthDate,匹配后端字段
    phoneNumber: string|null; // 改为phoneNumber,匹配后端字段
    email: string;
    address: string;
    profilepic: string|null;
    role: string;
    password: string;
    parking: Parking;
}

同时修改代码中的属性访问方式:

checking(){
    if(this.sesion.user != null){
      console.log(this.sesion.user.phoneNumber); // 改为phoneNumber
      if(this.sesion.user.phoneNumber === undefined) {
        alert("myProperty value is the special value `undefined`");
      }
    }
    
    console.log(this.sesion.user);
  }

方案二:字段映射(不推荐,仅临时应急)

如果无法修改接口,可以在接收后端数据时手动映射字段:

// 假设从后端获取数据的方法中
fetchUser().subscribe(data => {
  this.sesion.user = {
    ...data,
    phonenumber: data.phoneNumber, // 映射字段
    birthdate: data.birthDate
  };
});

这种方式会增加维护成本,优先推荐方案一保持字段名一致。

内容的提问来源于stack exchange,提问作者Alexandru Cristian Iordache

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:05:19