if(!!condition) 和 if(condition) 有啥区别
Posted
技术标签:
【中文标题】if(!!condition) 和 if(condition) 有啥区别【英文标题】:What is the difference between if(!!condition) and if(condition)if(!!condition) 和 if(condition) 有什么区别 【发布时间】:2013-11-18 01:45:35 【问题描述】:我经常看到代码使用!!condition
而不仅仅是常规条件。即:
if(!!value)
doSomething();
对比:
if(value)
doSomething();
如果有的话,功能上的区别是什么?一种优于另一种吗?如果有的话,选择使用一种与另一种的条件是什么?
【问题讨论】:
Can someone explain this 'double negative' trick? 的可能重复项 另见How to use the double not (!!) operator in javascript @JonathanNaguin:不,不是。 另见Why use!!
to coerce a variable to boolean for use in a conditional expression?
【参考方案1】:
这只是一种更明确的方式来测试一个值的“真实性”。
以下内容会将value
“转换”为布尔值。
!!(value)
例如,一个非空字符串
!!"a" // true
另一个空字符串的例子
!!"" // false
但是,如果您只是直接使用测试值
if (value) // ...
那么下面的值是 JavaScript 中的false
0
-0
null
""
(空字符串)
false
undefined
NaN
其他所有内容都是true
【讨论】:
在if条件下使用时可能没有意义,但作为返回值使用时,可用于发送布尔值。我认为这应该是公认的答案。【参考方案2】:技术上没什么。 double bang !!
类型将 value
转换为布尔值 - if 语句在评估 value
时所做的事情。
在您发布的代码中,!!
是无用的,毫无用处。
【讨论】:
【参考方案3】:!!确保结果类型是布尔值(true 或 false)。
javascript:alert("foo") --> foo
javascript:alert(!"foo") --> 错误
javascript:alert(!!"foo") --> true
javascript:alert(!!null) --> 错误
他们这样做是为了确保 $('row') 不为空。
键入比 $('row') 更短!= null ?真:假。
【讨论】:
以上是关于if(!!condition) 和 if(condition) 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章