Considering best practices, can we use double unary operator ! in JavaScript?
For my understanding the unary !
operator performs implicit type conversions, and are sometimes used for type conversion.
So basically the !
operator converts its operand to a boolean and negates it.
Now:
!!x // Same as Boolean(x)
In fact:
!!'true' === Boolean('true') // true
So I am assuming both !!x
and Boolean(x)
perform the same action.
I would like to know:
Your assumptions are correct. That is exactly how it works and I'm not aware of any special care to be taken when using this.
Speaking of good practice, you'll probably have as many people supporting the quick 'n "dirty" !!
way as there are who would advocate using the Boolean
function ; however, from my experience, it appears that !!
is way more common in library code (look at the jQuery source, you have a lot of stuff like return !!locked;
). IMHO, it is sufficiently recognizable to be used without degrading code readability.
This has all been standard for a very long time in ECMAScript ; I can't speak for old versions of Internet Explorer (before IE 8), but you can pretty much trust all modern browsers to behave the same in this case.
Useful references in the standard :
Do you know any caveats making my assumptions wrong?
Your assumption is correct. Both Boolean
function and !!
has the same functionality.
Which way should be preferred in term of good practice?
I recommend using unary operator twice because it is atleast two times faster than using Boolean with 100,000 iterations
JS fiddle link: https://jsfiddle.net/vj593auw/1/
Do you know any differences to be aware among different ECMAScript versions or Browser vendors?
Boolean and unary operators are implemented from JavaScript 1.0, so they should be available in all browsers that supports JavaScript.
链接地址: http://www.djcxy.com/p/73926.html上一篇: JavaScript中的单加操作符