Triple Equals Gives Wrong Output When Strings Are Compared, But In Case Of Integer It Gives Correct Output
Solution 1:
What you need is
a[0]==a[1] && a[0]==a[2]
In your case, when you are comparing ['1','1','1'], what happening is
a[0] == a[1] // true
true == a[2] // true as true == '1'
Solution 2:
What happens is that it executes it like this:
((a[0]==a[1])==a[2]):
1.
(a[0] == a[1]) => true
2.
(true == a[2]) => false
Because: 1 == true, the array [1,1,1] returns true
Solution 3:
It's easier to understand if you test the inner value direct:
0==0==0 is understood as (0==0)==0, so 0==0 is true, what's tested next is (true)==0, 0 is interpreted as false, and true==false is false.
For the other comparisons the first part is the same, but 1 or 9 are interpreted as true.
Solution 4:
This is expected output
// Case 1
var a = ['a','a','a'];
The output of
a[0] == a[1] --> true
Next Comparison
true == a[2] --> false // true != 'a';
// Case 2
var a = ['1','1','1'] ;
a[0] == a[1] --> true
true == a[2] --> true // true == "1"
However, in case 2 if you use strict equality operator then the result will be false.
var a = ['1','1','1'] ;
// strict equality operator
console.log(a[0]===a[1]===a[2]);
// without strict equality operator
console.log(a[0]==a[1]==a[2]);
Solution 5:
If you see the associativity of operator == it is left-to-right. So in your case
when
var a = ['a','a','a'];
a[0]==a[1]==a[2] this evaluate a[0]==a[1] first then result of this with a[3] means true == 'a' which returns false.
In case when var a = ['1','1','1']; so as per associativity this evaluates from left to right in expression a[0]==a[1]==a[2] results '1' == '1' in first, then true == '1' in second which gives true finally.
In case when var a = ['9','9','9']; first '9' == '9' then true == '9' which finally evaluates to false. Hope this helps.
Post a Comment for "Triple Equals Gives Wrong Output When Strings Are Compared, But In Case Of Integer It Gives Correct Output"