Double exclamation points?
Possible Duplicate:
What is the !! (not not) operator in JavaScript?
What does the !! operator (double exclamation point) mean in JavaScript?
So I was debuging some code and ran across this:
var foo.bar = 0; // this is actually passed from another function, adding it for context
function(foo)
var someVar = !!foo.bar;
if(foo.bar){
// ..stuff happens
}
else{
// .. something else happens
}
}
Okay my questions is what is the point of !!? All that is doing is making the 0 === false
.
Is there any benefit to using that compared to boolean(foo.bar)
?
foo.bar can be evaluated in an if as is because 0 === false
already, so why go through the conversion? (someVar is not reused anywhere else)
This converts a value to a boolean and ensures a boolean type .
"foo" = "foo"
!"foo" = false
!!"foo" = true
If foo.bar
is passed through, then it may not be 0 but some other falsy value. See the following truth table:
Truth Table for javascript
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == undefined // false
false == null // false
null == undefined // true
" trn" == 0 // true
Source: Doug Crockford
Javascript also gets really weird when it comes to NaN values. And this is the only case I can think of off the top of my head where !! would behave differently to ===.
NaN === NaN //false
!!NaN === !!NaN //true
// !!NaN is false
I think the answer is that there isn't really much point. We can speculate about how it came about:
someVar
in multiple places, or in ways that genuinely benefited from having true
or false
, so this made more sense. !!
to convert to true
/ false
that (s)he didn't even notice that it wasn't necessary here. new Boolean(false)
is a true-valued value), the person who wrote the function feels that it should always be done explicitly rather than implicitly — even though the effect is the same — just to call attention to it as a potential point of error. !!
as an "explicit" Boolean conversion. Technically it's not — it uses the same implicit Boolean conversion that if
does — but if youȍ
链接地址: http://www.djcxy.com/p/12640.html
上一篇: JavaScript中的双重否定(!!)
下一篇: 双感叹号?