检查Angular HTML中的布尔真值

Posted

技术标签:

【中文标题】检查Angular HTML中的布尔真值【英文标题】:Checking boolean truth value in Angular HTML 【发布时间】:2020-01-19 14:58:10 【问题描述】:

我正在尝试检查 Angular html 中的布尔值的真实性,并得到一个奇怪的结果。阅读this SO post 后,我想我明白发生了什么。我希望能够使用 === 运算符,但正如我下面的最后一个示例所示,它不会返回正确的结果。

StackBlitz example of my code

我上面代码的输出状态:

未选择任何内容,但默认值为 false

新建:假

双 eq isCreateNew==false: true

字符串 isCreateNew=='false': false

obj isCreateNew===false: true

设置为 true 创建新的:true

双 eq isCreateNew==false: false

字符串 isCreateNew=='false': false

obj isCreateNew===false: false

设置为假

新建:假

double eq isCreateNew==false: false

字符串 isCreateNew=='false': true

obj isCreateNew===false: false

【问题讨论】:

【参考方案1】:

在 JS 中只有一个空字符串等于 `false'。所以,预期的结果是

字符串 isCreateNew=='false': false

总是。您可以在浏览器控制台中轻松查看。

然后,在绑定 mat-radio-button 值属性时不要使用方括号。在这种情况下,传递的值不会被评估为 javascript。因此,您的 mat-radio-button 元素的值是一个字符串。不是布尔值。使用方括号解决其他问题。

<mat-radio-group class="example-radio-group" [(ngModel)]="changeAE">
    <mat-radio-button class="example-radio-button" [value]="true">set true</mat-radio-button>
    <mat-radio-button class="example-radio-button" [value]="false">set false</mat-radio-button>
</mat-radio-group>

【讨论】:

很好的解释?【参考方案2】:

根据type conversion rules,字符串'false' 不会转换为布尔值false。这意味着

false == 'false' // It is indeed false

所以这不应该是意外的,这是预期的结果。

现在您可能会问为什么当您将 isCreateNew 设置为 false 时它会返回 true。问题实际上出在您的代码中。您的单选按钮没有将值设置为布尔值falsetrue,而是将其设置为字符串。要将其设置为布尔值,您需要使用方括号。

<mat-radio-button class="example-radio-button" [value]="true">set true</mat-radio-button>
<mat-radio-button class="example-radio-button" [value]="false">set false</mat-radio-button>

判断您的值未正确设置的另一种方法是通过您的ngModel。如果您在组件中将isCreateNew 设置为false,则应设置检查false 单选按钮。由于您的值是字符串,因此不会发生这种情况。添加方括号后,您可以看到 false 单选按钮被选中。

【讨论】:

类型转换规则的链接是javascript的一大宝藏?【参考方案3】:

像这样的value="true" 会将changeAE 设置为字符串的值'true' 但是这个[value]="true"将AE 更改为真正的布尔值

<mat-radio-group class="example-radio-group" [(ngModel)]="changeAE">
    <mat-radio-button class="example-radio-button" [value]="true">
      set true
    </mat-radio-button>
    <mat-radio-button class="example-radio-button" [value]="false">
      set false
    </mat-radio-button>
</mat-radio-group>

=== 比较并检查比较边的类型typeof 'true' 是字符串,typeof true 是布尔值(如果有任何类型)

【讨论】:

以上是关于检查Angular HTML中的布尔真值的主要内容,如果未能解决你的问题,请参考以下文章

js中的真值和假值

Karma-coverage 检查 JS 文件中的测试覆盖率,而不是 Angular 2 中的 TS

布尔逻辑和真值表解释

布尔逻辑和真值表

获取布尔列表中第一个真值的索引

2020 -02- 07组件与模板