【问题标题】:Default parameter vs. question mark默认参数与问号
【发布时间】:2019-07-19 11:19:20
【问题描述】:

处理可选输入参数的更好方法是什么?

@Input() public isActive?: boolean;

@Input() public isActive: boolean = undefined;

还有一个小困惑,下面的代码会产生什么结果以及为什么(如果在视图中未指定isActive)?

@Input() public isActive?: boolean = undefined;

<app-sth [otherParameter]="true"></app-sth>

【问题讨论】:

标签: javascript angular


【解决方案1】:

处理可选输入参数的更好方法是什么?

这两个语句之间没有区别:@Input() public isActive?: boolean@Input() public isActive: boolean = undefined

两者都未定义

取自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined#Description

未赋值的变量是未定义类型。

第一条语句没有被赋值,所以它是未定义的。第二条语句被分配了一个未定义的类型,因此它是未定义的。

附带说明,即使您为属性分配了 null 的值,例如@Input() public isActive: boolean = null;,JS 引擎不会将该属性评估为假。因为 null 既不是真也不是假。

如果您对 null 和 undefined 之间的区别感到好奇,您可以在这里阅读:What is the difference between null and undefined in JavaScript?


还有一个小困惑,下面的代码会产生什么结果以及为什么 (如果视图中没有指定isActive)?

没有,不会抛出错误,因为您已将属性声明为“可选”,如果您来自其他语言,您可能知道它是“可空的”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2018-05-26
    • 2019-12-14
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多