w3schools ternarios ternario operator operadores operador multiple logicos ejemplo javascript

ternarios - Javascript-operador ternario con declaraciones mĂșltiples



operadores ternarios php (3)

O puedes hacer esto:

b = a!==b ? (a=1,2) : (a=2,1);

Lea here sobre el operador de coma.

El operador de coma evalúa cada uno de sus operandos (de izquierda a derecha) y devuelve el valor del último operando.

¿Es este JavaScript válido? Vi un ejemplo donde alguien usaba comas en las condiciones del operador ternario, estaba marcado como un error en mi editor y el ejemplo no se ejecutaba en Chrome. Sin embargo, se ejecutó en Firefox. Una vez que convertí todas las declaraciones ternarias a las declaraciones if / else, la aplicación se ejecutó en Chrome.

a!==b ? (a=1, b=2) : (a=2, b=1)

Editar:

Esta es la declaración real en el código:

a!==0?b<0?(h=b/a,e=h-1,f=-2*b+2*a*e,i=-2*b+2*a*h,d=2*h*a-2*b-2*a):(h=b/a,e=h+1,f=2*b-2*a*e,i=2*b-2*a*h,d=-2*h*a+2*b):d=h=e=f=i=0


Sí, es válido y funciona bien en Chrome:

var a, b, c; a = 6; b = 7; c = a !== b ? (a = 1, b = 2) : (a = 2, b = 1); console.log("a = " + a); console.log("b = " + b); console.log("c = " + c);

No estoy diciendo que sea una buena idea remota en el código que los humanos deben leer. :-) Espero que Jamietre sea correcto en los comentarios cuando él / ella diga que se parece al resultado de la minificación.

El operador de coma es un operador binario (un operador que acepta dos operandos). Evalúa su operando de la izquierda (causando así los efectos secundarios que tiene, como la asignación), desecha ese resultado, luego evalúa su operando de la derecha (causando así sus efectos secundarios, si los hubiera) y toma ese resultado como su valor de resultado. Si tiene varios operadores de coma en una fila, la expresión general se evalúa en orden, de izquierda a derecha, y el resultado final es el valor resultante de la evaluación del operando más a la derecha.

Y, por supuesto, usted sabe que el operador condicional (un operador ternario, uno que acepta tres operandos) se utiliza para seleccionar una de las dos subexpresiones para evaluar, sobre la base de una expresión inicial.

Así que esa línea es muy ... expresiva ... con un total de siete * expresiones diferentes dentro de ella.

Entonces, en ese ejemplo, el resultado de la expresión general es 2 si a !== b inicialmente, o 1 si a === b inicialmente, con los efectos secundarios de configurar a y b .

Son los efectos secundarios los que lo hacen, en mi opinión, una opción cuestionable. Y, por supuesto, no hay razón para usar el operador de coma si el operando de la izquierda no tiene efectos secundarios.

* Sí, siete de ellos empacados en ese ternario general:

  • a !== b
  • la primera expresión de coma
  • a = 1
  • b = 2
  • la segunda expresión de coma
  • a = 2
  • b = 1

Re su edición con la declaración real, que uno funciona también:

function test(a) { var b = 7, d = 1, e = 2, f = 3, g = 4, h = 5, i = 6; a!==0?b<0?(h=b/a,e=h-1,f=-2*b+2*a*e,i=-2*b+2*a*h,d=2*h*a-2*b-2*a):(h=b/a,e=h+1,f=2*b-2*a*e,i=2*b-2*a*h,d=-2*h*a+2*b):d=h=e=f=i=0; console.log("a = " + a); console.log("b = " + b); console.log("d = " + d); console.log("e = " + e); console.log("f = " + f); console.log("g = " + g); console.log("h = " + h); console.log("i = " + i); } test(0); test(1);

.as-console-wrapper { max-height: 100% !important; }

Pero wow, espero que esto se minimice, porque si una persona escribió eso, realmente debe tener algo contra alguien que se supone debe mantenerlo más tarde ... ;-)


Sí:

a=1; b=2; a!==b ? (a=1, b=2) : (a=2, b=1) console.log(a); // 1 console.log(b); // 2

y:

a=1; b=2; a===b ? (a=1, b=2) : (a=2, b=1) console.log(a); // 2 console.log(b); // 1

Como puede analizar, cambiar el operador de igualdad reacciona correctamente a nuestra prueba si observa los resultados.