Estoy estudiando para un examen de JavaScript en este momento. También tengo un poco de conocimiento de C y Perl, así que estoy familiarizado con la notación de prefijo y postfijo en los tres idiomas.¿Por qué la notación postfix de JavaScript es diferente de C y Perl?
Me hicieron un examen de práctica en línea para ello y un error que hice fue evaluar el siguiente código:
var x = 10;
x += x--;
Ahora, pensé que iba a evaluar a 19, ya que sería 10 + 10, luego restar 1 para hacer 9. Pero la respuesta que recibí fue que estaba mal y en realidad se evalúa a 20. Pensé que sonaba un poco sospechoso, así que lo probé en un documento HTML, y salió con 20 de nuevo. Luego probé los equivalentes en C y Perl y los evalué en 19.
¿Alguien puede explicarme por qué JavaScript evalúa la respuesta como 20 cuando otros idiomas la evalúan como 19? La respuesta que obtuve de la prueba no era demasiado claro para mí:
El incremento y decremento ++ - operadores pueden colocar ya sea antes o después de un operando. Si el operador de incremento o decremento se coloca antes del operando, la operación se produce inmediatamente. Si el operador de incremento o decremento se coloca después del operando, el cambio en el valor del operando no es aparente hasta la próxima vez que se acceda al operando en el programa. Así, la expresión x + = x-- es equivalente a x = x + 10 que evalúa a 20.
¡Ah, cómo odio este tipo de estúpidas preguntas de "gotcha"! Los operadores de incremento/decremento de Postfix nunca deberían aparecer en una expresión que contenga otra referencia a la variable que está (en | de) crementado. –
en C, esto es un comportamiento indefinido; cualquier código que contenga este fragmento está inherentemente roto – Christoph
¿'' = = no introduce un punto de secuencia? –