javascript - 在 ES6 中处理 undefined variable 或属性

标签 javascript angular ecmascript-6 undefined

在我的特定情况下,我使用的是 Angular 和 Firebase Firestore,但是,这个问题也可能与 Typescript 和纯 Javascript 相关。

我的应用程序完全依赖于我从 Firestore 获取的数据。 我将生成的最小、可重现的代码示例如下所示。

TS:

export class EditStudentComponent implements OnInit {

  user:Object = {};

  ngOnInit() {
      this.NgProgress.start()
      this.fb.user$.subscribe(user => {
        this.user = user;
      })
  }
}

HTML:

User-Info:
Name: {{ user.name }}<br>
Age: {{ user.age }}<br>

在这种情况下,不存在的属性 nameage 会引发错误。 有没有比对每个属性都做这样的事情更好的方法?

export class EditStudentComponent implements OnInit {

  user:Object = {};

  ngOnInit() {
      this.NgProgress.start()
      this.fb.user$.subscribe(user => {
        this.user = user;

        //Setting default values for all properties individually
        this.user.name = 'name' in this.user ? (this.user as any).name : 'No value found';
        this.user.age = 'age' in this.user ? (this.user as any).age : 'No value found';
      })
  }
}

最佳答案

您的情况有多种解决方案,您不需要为每个属性添加额外的 ts 代码。

在属性前面使用问号 ? 来检查它是否存在,那么输出将只是空白。

{{ user?.name }}

对于嵌套属性也是一样。

{{ user?.name?.first }}

使用或运算符||,然后您可以决定您的默认值。

{{ user?.name || 'Default name' }}

或者您编写了一个管道,这将是一种过大的杀伤力,并且与第二种解决方案有点相同。

关于javascript - 在 ES6 中处理 undefined variable 或属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58901372/

相关文章:

javascript - 为什么 + 符号是 javascript 中的异常(exception)?

javascript - jQuery 添加 URL 参数

javascript - 粘贴后绘制图像

java - 等待 Angular 完成加载问题

javascript - 仅从对象 javascript 数组中过滤唯一值

javascript - 通过 findIndex 方法比较 'id'

javascript - Vue-tables-2 options.hiddenColumns 不起作用

javascript - 如何将字符串渲染为自定义 React 组件?

Angular4 - 无法绑定(bind)到 'vgHls',因为它不是 'video' 的已知属性。

javascript - 滚动到顶部 React 不适用于 Reactdom 的 findDOMNODE