3

是否有任何理由在布尔上下文中使用!!someValue(相当于Boolean(someValue)) ?换句话说,在这种情况下,写作有意义吗?if (someValue) ...if (!!someValue) ...

它伤害了我的眼睛,我认为它是多余的,但我想验证没有任何边缘情况需要它 - 因为我遇到了一个代码库,这似乎是检查真实性的默认方式。

澄清:是的,在一般情况下!!someValue将转换someValue为布尔值;我指的是运行时将自动转换someValuetrueor的上下文false

4

3 回答 3

4

这是将任何数据类型转换为布尔值的有用方法;确切的同义词是:

Boolean(someValue)

有些人更喜欢“双重爆炸”,因为它更简洁,而另一些人则更喜欢经典的转换,以Boolean(someValue)获得更好的可读性。

所以回到你的问题,它很可能在条件上是多余的,但在需要从任何类型转换为布尔值时它会很方便。

于 2022-02-08T20:37:50.087 回答
0

不能说我知道为什么有人会依赖直接检查布尔值而不是真实性,但至少在一种情况下,真实性不同于强制使用!!.

console.log([] == false); // true
console.log(!![] == false); // false
if([]) { console.log(true); } // true
if([] == false) { console.log(true); } // true
if(!![] == false) { console.log(true); } else { console.log(false); } // false

于 2022-02-08T23:32:48.663 回答
0

您永远不需要使用双键将布尔值转换为布尔值。

boolean === !!boolean
于 2022-02-08T21:03:40.237 回答