Question

In a browser console, entering 1===1 evaluates to true. Entering 1===1===1 evaluates to false.

I assume that this is because of the way the statement is evaluated:

1 === 1 === 1

becomes

(1 === 1) === 1

which evaluates to

true === 1

which is false.

Is this correct? If not, what's the real reason for this behaviour?

Was it helpful?

Solution

Yes, you're exactly right. Here you have two equality checks, which have the same operator precedence. First one evaluates first, then its result applies to the next equality check.

1===1===1is the same as (1===1)===1 which is true===1 which is false, because here you check by values AND their types. 1==1==1 will result in true, because it checks equality by values only, so 1==1==1 equal to (1==1)==1 equal to true==1 equal to true.

OTHER TIPS

The === operator doesn't just test equality, but also type equality. Since an integer is not a boolean, true === 1 is false.

Compare:

true == 1; // true
true === 1; // false

Example.

Correct behaviour. Since

1===1 // value is true

but

true===1 // it's false

There are two reasons for this:

  1. true is a boolean type where 1 is integer
  2. simply, 1 is not equal to true.

so

1===1===1 // false

The behaviour that you mentioned is correct.

Its because === implies matching based on type and value. true === 1 does not match on type, but true == 1 matches based on value.

if 1==1==1 then it will be true

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top