Javascript 在布尔上下文中使用时,为什么要将对象转换为布尔值?

Javascript 在布尔上下文中使用时,为什么要将对象转换为布尔值?,javascript,Javascript,我理解将任何内容转换为布尔值,但为什么要这样做: if (!!someObject) { ... } 当你能做到的时候: if (someObject) { ... } 编辑: 我只是想澄清一下,我只是想问,为什么要像第一个例子那样编写代码,而不是像第二个例子那样编写代码。有什么实际的区别吗?它们之间没有显著的区别。所以,最有可能的是,这是个人偏好,或者是明确的意图 不过,这可能是因为不确定/误解了如何或何时将值视为布尔值 但是,两者都使用内部的ToBoolean(): 如果((exprRe

我理解
将任何内容转换为布尔值,但为什么要这样做:

if (!!someObject) { ... }
当你能做到的时候:

if (someObject) { ... }
编辑:


我只是想澄清一下,我只是想问,为什么要像第一个例子那样编写代码,而不是像第二个例子那样编写代码。有什么实际的区别吗?

它们之间没有显著的区别。所以,最有可能的是,这是个人偏好,或者是明确的意图

不过,这可能是因为不确定/误解了如何或何时将值视为布尔值

但是,两者都使用内部的
ToBoolean()

如果((exprRef))为
true
,[…]

设oldValue为((expr))


运算符只需再添加两轮
ToBoolean()
,并在
if
语句自身使用的基础上加上否定。但是,结果是一样的。

请参阅:例如
return!!5
~arr.indexOf(n)
。有很多用法,不仅仅是
if
语句。@elclans我理解,但我在第一个示例中特别询问了用法。
没有真正的用途
if
语句AFAIK中。你可以依靠真实或虚假。
仅在
if
中有用,例如,如果您想要检查两件事情都是真实的或都是虚假的,您可以在(!!a===!!b){/*../}
中执行
操作。编辑:如果这是数字,那么它可能意味着“
a
b
都是
0
a
b
都是非零”