Angular循环访问对象属性显示undefined但打印整个对象存在数据
问题原因
- 属性名大小写不匹配
JavaScript对对象属性名大小写敏感,你的代码中访问的是首字母大写的LatitudeY,但接口返回的实际对象属性是首字母小写的latitudeY,拼写不一致会直接导致读取结果为undefined。 - 浏览器控制台惰性求值特性
打印整个对象时,浏览器控制台存储的是对象的引用,只有当你手动点击展开对象时,才会读取对象的当前属性值,此时service的异步数据加载已经完成,你就能看到已经赋值的属性;但打印mapview.LatitudeY时是代码执行到该行时立即取值,若此时异步请求还未返回、属性尚未赋值,就会返回undefined。
可行解决方案
- 优先核对属性名拼写,将代码中的访问逻辑改为
mapview.latitudeY,和返回对象的属性名保持大小写一致 - 调整执行时序,确保遍历逻辑在service数据完全返回后执行:
- 若使用Observable封装service请求,将遍历逻辑放到subscribe的成功回调中
- 若使用async/await写法,先await service异步请求完成后再执行遍历
- 增加访问防护,使用可选链语法
mapview?.latitudeY读取属性,避免对象未初始化时抛出异常 - 调试时可以用
console.log(JSON.stringify(mapview))打印代码执行到该行时对象的实际快照,排除控制台惰性求值的干扰
内容的提问来源于stack exchange,提问作者Abdul Ali
相关产品推荐
相关产品推荐

