Pesquisa de site

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.

Artigos relacionados