validar validacion vacios formularios formulario enviar ejemplos ejemplo crear con campos antes javascript compare operators boolean-logic

validacion - validar formulario javascript html5



¿Por qué devuelve verdadero(0<5<3)? (13)

Estaba jugando en jsfiddle.net y tengo curiosidad por saber por qué esto vuelve verdad

if(0 < 5 < 3) { alert("True"); }

Así hace esto:

if(0 < 5 < 2) { alert("True"); }

Pero esto no lo hace:

if(0 < 5 < 1) { alert("True"); }

¿Es esta peculiaridad alguna vez útil?


¿está evaluando 0 <5 que devolvería 1 para verdadero cuando 1 <3 que es verdadero?

C # quiere permitirte hacer esto "Operador ''<'' no se puede aplicar a operandos de tipo ''bool'' e ''int''"


Además de python, CoffeeScript es otro lenguaje que admite comparaciones encadenadas, por lo que 3 < x < 10 se convertirían a (3 < x && x < 10) en vainilla JS


El orden de las operaciones hace que (0 < 5 < 3) se interprete en javascript como ((0 < 5) < 3) que produce (true < 3) y verdadero se cuenta como 1, lo que hace que se devuelva verdadero.

Esta es también la razón por la que (0 < 5 < 1) devuelve falso, (0 < 5) devuelve verdadero, que se interpreta como 1 , lo que resulta en (1 < 1) .


En cuanto a su pregunta sobre si esta peculiaridad es útil: supongo que podría haber algún caso en el que sea útil (si lo que busca es el código condensado), pero confiar en ello (muy probablemente) reducirá considerablemente la comprensibilidad de su código.

Es como usar post / pre incremento / decremento como parte de expresiones más grandes. ¿Puedes determinar cuál es el resultado de este código de un vistazo?

int x = 5; int result = ++x + x++ + --x;

Nota: con este código, a veces incluso puede obtener resultados diferentes según el idioma y el compilador.

Es una buena idea hacer la vida más fácil para usted y para el próximo que lea su código. Escriba claramente lo que realmente quiere que suceda en lugar de depender de efectos secundarios como la conversión implícita de los booleanos.


Eso es fácil.

(0 < 5 < 3)

Comience con de izquierda a derecha para que evalúe el primer 0 <5. ¿Es cierto? Sí. Dado que TRUE = 1, evalúa 1 <3. Dado que 1 es menor que 3, es cierto.

Ahora con esto

(0 < 5 < 1)

¿Es 0 menos que 5? Sí. Así que hazlo VERDADERO, que también significa 1. Ahora, con ese hecho en mente, se evalúa como (1 <1). ¿Es 1 menos que 1? No, por lo tanto es falso. Tiene que ser igual.


La respuesta a la segunda parte de la pregunta, "¿es esta peculiaridad alguna vez útil?" es tal vez no, como se señaló en una respuesta anterior, si de hecho es una peculiaridad del lenguaje (Javascript) que verdadero se convierte a 1, pero que el programador no ve en general 1 y verdadero (y 0 y falso) como el la misma cosa.

Sin embargo, si tienes un modelo mental de 1 que es verdadero y 0 que es falso, entonces te lleva a todo tipo de buenas técnicas booleanas que son extremadamente útiles, poderosas y directas. Por ejemplo, podría incrementar un contador directamente con el resultado de A> 100, lo que incrementaría el contador si A es mayor que 100. Esta técnica puede verse como una peculiaridad o truco en Java, pero en una matriz o lenguaje funcional puede ser idiomático

Un ejemplo clásico en el lenguaje de matriz APL sería contar el número de elementos en una matriz que son (por ejemplo) mayores que 100:

+/A>100

Donde si A es la matriz de 5 elementos 107 22 256 110 3 entonces:

A>100

produce la matriz booleana de 5 elementos:

1 0 1 1 0

y sumando este resultado booleano:

+/1 0 1 1 0

da la respuesta final:

3

Esta pregunta es un ejemplo perfecto de dónde sería muy útil esta técnica, especialmente si el problema se generaliza para determinar si n de m valores booleanos son verdaderos.

Comprueba si al menos dos de cada tres booleanos son verdaderos


Me encontré con esto hace un momento en Obj-C y me sorprendió mucho. Obtuve los resultados que quería haciendo algo como esto:

if(0 < 5 && 5 < 3) { alert("True");}

Lo que, por supuesto, es falso, por lo que no obtendría esa alerta "verdadera". Me alegro de haber leído esto, ahora sé por qué.


Porque es true < 3 , porque es true == 1


Probablemente porque la true se asume como 1 por lo

0 < 5 < 3 --> true < 3 --> 1 < 3 --> true


Supongo que porque 0 < 5 es verdadero, y true < 3 convierte en 1 < 3 cual es cierto.


Un operando booleano cuando se opera sobre un operador matemático devuelve un número. para comprobar esto hacemos

true + 1 which gives you 2.

Entonces, 0 < 5 , el booleano devuelto (verdadero) operado con el operador matemático (<) devolverá un número. Así que se reduce a 1 <3 lo que devuelve true


porque 0 es menor que 5, entonces devuelve verdadero, y por defecto verdadero es cualquier cosa que incluya y puede evaluarse a 1, que aún es menor que 3, lo que nuevamente devuelve verdadero


0 < 5 < 3 ==> ( ( 0 < 5 ) < 3 ) ==> true < 3 ==> 1 < 3 ==> true