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?

有帮助吗?

解决方案

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.

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top