【发布时间】:2022-01-09 20:01:41
【问题描述】:
在 ngIf 中需要从对象值返回一个布尔值。
var a = {"c" : "b","f": "g"}
a["c"] => 'b'
(a && a["c"]) => 'b' // 为什么这里没有返回 true
a && a["c"] => 'b' // 如何从这里的值返回布尔值
!!( a && a["c"]) => true // 是返回 true 的正确方式还是其他更好的方式?
<button title="Submit" *ngIf="!!(a && a["c"])">Submit</button>
【问题讨论】:
-
*ngIf中的任何条件都会自动转换为布尔值,您不需要手动执行,a["c"]和a && a["c"]都是正确的。 -
(a && a["c"])如果a为假,则返回a,如果a为真,则返回a["c"]。一个对象总是真实的,因此(a && a["c"])返回"b"。!!是将真值转换为真,将假值转换为假的常用操作。我会使用!!(a && a["c"])将(a && a["c"])转换为布尔值。您可以使用!!a?.c使其更短。 -
(a && a["c"]) => 'b' ... (a) && (a["c"] => 'b') - 你有括号优先级问题
-
@JGFMK 我不认为
(a && a["c"]) => 'b'是实际代码。代码是(a && a["c"]),'b'是结果。您的推荐a["c"] => 'b'甚至不是有效的 JavaScript。 -
a 表示“a”存在。 a["c"],取内容的值 - b 并说它是否大于或等于 b - 它会是 - 你不能对真值和字符进行逻辑或运算 - 并将其与 a 进行比较字符文字 - 所以我是正确的。
标签: javascript html angular typescript