Reputation: 5491
I was wondering if there is a "&" logical operator in Javascript. I tried running 1 & 0 and 1 && 0 in Firebug(Firefox) and it returned a 0 for both.
Someone told me that C# accepts both & and double &&, double being more efficient as it will exit the comparison loop as soon as a false is encountered, but I was not able to find any info for Javascript on that.
Any ideas?
Upvotes: 6
Views: 13177
Reputation: 2812
You can check this for bitwise in javascript:
https://www.w3schools.com/js/js_bitwise.asp
& is Sets each bit to 1 if both bits are 1
Examples: 5 & 1 = 1
0101 & 0001 = 0001
Upvotes: 1
Reputation: 413717
The &&
operator returns 0
for the expression 1 && 0
because its semantics are different than those of the same operator (well, symbolically the same) in other C-like languages.
In Javascript, the &&
operator does coerce its operands to boolean values, but only for the purposes of evaluation. The result of an expression of the form
e1 && e2 && e3 ...
is the actual value of the first subexpression en
whose coerced boolean value is false
. If they're all true
when coerced to boolean, then the result is the actual value of the last en
. Similarly, the ||
operator interprets an expression like this:
e1 || e2 || e3 ...
by returning the actual value of the first en
whose coerced boolean value is true
. If they're all false, then the value is the actual value of the last one.
Implicit in those descriptions is the fact that both &&
and ||
stop evaluating the subexpressions as soon as their conditions for completion are met.
Upvotes: 5
Reputation: 7437
Your friend is wrong about C#.
C# does not mix logical and bitwise operators, so you cannot use & where && is needed or vice versa.
1 & 0 returns 0
true && false returns false
So if you're writing an if statement, which expects a boolean, you have to use &&. And if you're doing bit-wise arithmetic, then you need &.
Upvotes: 1
Reputation: 12545
1 & 0 is 0.
It's a bitwise operator, not a logical operator.
&& means a logical AND of the left and right operators. This means it will return a boolean true value only if both the left and right operators resolve to boolean true.
& means a bitwise AND of the left and right operators. This means the bits of each operand will be compared and the result will be the ANDed value, not a boolean. If you do 101 & 100
the return value is 100
. If you do 1 & 0
, the return value is 0
.
You've been mislead about the meaning of the two operators if someone told you the difference was just in efficiency. They have very different uses.
Upvotes: 3
Reputation:
Javascript has the bitwise (&) and boolean (&&) operators. The reason && returns a 0 on 1 && 0 is because 0 would indicate false and so 1 (true) && 0 (false) returns a false as both operators must evaluate to true to return a true
Upvotes: 0
Reputation: 12806
&& is the logical operator in Javascript. 1 && 0 should return false so it is performing correctly.
Upvotes: 0
Reputation: 27343
Yes. Javascript has both. http://www.eecs.umich.edu/~bartlett/jsops.html
Exactly as is true in C#, the double && version can stop as soon as it encounters a false, and the single & version may not.
Upvotes: 1
Reputation: 82483
No. &
is a bitwise AND operator. &&
is the only logical AND operator in Javascript.
Upvotes: 10