javascript - Por que (0 < 5 < 3) retorna verdadeiro?
Eu estava brincando no jsfiddle.net e estou curioso para saber por que isso retorna verdadeiro?
if(0 < 5 < 3) {
alert("True");
}
Então faz isso:
if(0 < 5 < 2) {
alert("True");
}
Mas isso não:
if(0 < 5 < 1) {
alert("True");
}
Essa peculiaridade já foi útil alguma vez?
Resposta #1
A ordem das operações faz com que (0 < 5 < 3) seja interpretado no javascript como ((0 < 5) < 3), o que produz (true < 3) e true é contado como 1, fazendo com que retorne true.
É também por isso que (0 < 5 < 1) retorna falso, (0 < 5) retorna verdadeiro, o que é interpretado como 1, resultando em (1 < 1).
Resposta #2
Meu palpite é que porque 0 < 5 é verdadeiro, e true < 3 é convertido para 1 < 3, o que é verdadeiro.
Resposta #3
provavelmente porque true é assumido como 1 então
0 < 5 < 3 --> true < 3 --> 1 < 3 --> true
Resposta #4
Porque true < 3, porque true == 1
Resposta #5
Quanto à sua pergunta sobre se essa peculiaridade alguma vez é útil: suponho que poderia haver algum caso em que seria útil (se código condensado é o que você procura), mas depender dela provavelmente reduzirá severamente a compreensibilidade do seu código.
É meio como usar incremento/decremento pós/pré como parte de expressões maiores. Você consegue determinar qual é o resultado desse código de relance?
int x = 5;
int result = ++x + x++ + --x;
Nota: com este código, às vezes você pode até obter resultados diferentes dependendo da linguagem e do compilador.
É uma boa ideia facilitar a vida para você e para a próxima pessoa que vai ler seu código. Escreva claramente o que você realmente quer que aconteça em vez de confiar em efeitos colaterais, como a conversão implícita de booleanos.
