当使用
=>
计算布尔表达式时,它实际上被计算为箭头函数,例如在条件分支的上下文中。
let x = -1
if (x => 0) {
console.log("true")
} else {
console.log("false")
}
这段代码会输出
true
,因为表达式x => 0
变成了一个匿名函数对象,这是真的。
一个明显的解决方案是使用
<=
反转整个布尔表达式,这样就不会受到箭头函数语法的歧义的影响。但这有可能在布尔代数的背景下显着降低可读性,这已经有点难以直观地推理。
if (0 <= x) {
console.log("true");
} else {
console.log("false");
}
在 TypeScript 中,问题本质上是相同的,尽管 no-implicity-any 错误可以给出提示。
是否有一种惯用的方法来强制使用大于或等于语义进行布尔求值?
let x = -1;
if (x >= 0) {
console.log("true");
} else {
console.log("false");
}
这是条件的正确写法。
>=
是比较一个值是否大于或等于另一个值的正确运算符。
箭头函数使用 =>
语法,没有比较意义。