admin管理员组文章数量:1321608
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:
- Do you know any caveats making my assumptions wrong?
- Which way should be preferred in term of good practice?
- Do you know any differences to be aware among different ECMAScript versions or Browser vendors?
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:
- Do you know any caveats making my assumptions wrong?
- Which way should be preferred in term of good practice?
- Do you know any differences to be aware among different ECMAScript versions or Browser vendors?
- 1 Why do you keep referring to it as unary? Is there a binary ! operator? – BoltClock Commented Jul 1, 2015 at 7:53
- 1 @BoltClock thanks for your ment, for my understanding ! is a unary operator. I found this reference in JavaScript: The Definitive Guide, 6th Edition. – GibboK Commented Jul 1, 2015 at 7:58
-
5
IMO it doesn't matter. They are the same in this case. I would prefer double-negate operator
!!
because it is less typing. Just bang bang and you are done. But some would say thatBoolean()
casting function is more human readable. – Blago Eres Commented Jul 1, 2015 at 8:15 -
1
the same thing is true for
!!'false' === true
because as far as I know strings with a value other than''
are always true – nils Commented Jul 1, 2015 at 8:40 -
2
@Anand it's not "the same as not using it".
var k = 'hey you'; console.log(k === !!k);
will print "false". This is all about type, the point is to get a boolean value based on the content of the operand, which might be anything from a number to an arbitrary object. – ttzn Commented Jul 1, 2015 at 9:28
2 Answers
Reset to default 7Your 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 theBoolean
function ; however, from my experience, it appears that!!
is way more mon in library code (look at the jQuery source, you have a lot of stuff likereturn !!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 :
- http://www.ecma-international/ecma-262/5.1/#sec-11.4.9
- http://www.ecma-international/ecma-262/5.1/#sec-9.2
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?
In terms of performance, Boolean is now globally faster than unary operators
JS fiddle link: https://jsfiddle/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.
本文标签: Considering best practicescan we use double unary operatorin JavaScriptStack Overflow
版权声明:本文标题:Considering best practices, can we use double unary operator ! in JavaScript? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742105397a2420993.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论