¿Por qué es 1===1===1 falso?


En una consola del navegador, introducir 1===1 da como resultado true. Entrar 1===1===1 da como resultado false.

Asumo que esto se debe a la forma en que se evalúa la declaración:

1 === 1 === 1

Se convierte en

(1 === 1) === 1

Que evalúa a

true === 1

Que es false.

Es esto correcto? Si no, ¿cuál es la verdadera razón de este comportamiento?

Author: surfitscrollit, 2013-11-13

5 answers

Sí, tienes toda la razón. Aquí tiene dos comprobaciones de igualdad, que tienen la misma precedencia de operador. Primero se evalúa primero, luego su resultado se aplica a la siguiente comprobación de igualdad.

1===1===1es lo mismo que (1===1)===1 que es true===1 que es false, porque aquí se comprueba por valores y sus tipos. 1==1==1 resultará en true, porque comprueba la igualdad por valores, por lo que 1==1==1 igual a (1==1)==1 igual a true==1 igual a true.

 40
Author: aga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-13 13:59:44

El operador === no solo prueba la igualdad, sino que también escribe la igualdad. Dado que un entero no es un booleano, true === 1 es false.

Comparar:

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

Ejemplo.

 20
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-05 11:55:49

Comportamiento correcto. Desde

1===1 // value is true

Pero

true===1 // it's false

Hay dos razones para esto:

  1. true es un tipo booleano donde 1 es entero
  2. simplemente, 1 no es igual a verdadero.

So

1===1===1 // false
 3
Author: C M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-13 21:19:03

El comportamiento que mencionaste es correcto.

Es porque === implica la coincidencia basada en el tipo y el valor. true === 1 no coincide con el tipo, pero true == 1 coincide con el valor.

 2
Author: Pratik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-24 06:28:54

If 1==1==1 entonces será verdad

 -2
Author: microbingbing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-15 02:53:43