默认参数与问号

时间:2019-07-19 11:19:20

标签: javascript angular

哪种是处理可选输入参数的更好方法?

@Input() public isActive?: boolean;

@Input() public isActive: boolean = undefined;

还有一个难题,下面的代码会导致什么,为什么(如果未在视图isActive中指定)?

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

使用

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

1 个答案:

答案 0 :(得分:1)

  

哪种是处理可选输入参数的更好方法?

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

两者均未定义

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

  

尚未分配值的变量的类型为undefined。

第一条语句尚未分配值,因此未定义。第二条语句已分配了未定义的类型,因此它是未定义的。

另一方面,即使您为属性分配了null的值,例如@Input() public isActive: boolean = null;,JS引擎将 将属性评估为假。因为null既不是true也不是false。

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


  

还有一个小难题,以下代码会导致什么以及为什么   (如果未在视图中指定isActive)?

没什么,不会抛出任何错误,因为您已将该属性声明为“可选”,如果您来自其他语言,则可能会将其称为“可空”。