¿Cuál es la forma correcta de interpretar esta complicada expresión de javascript?expresión condicional complicada de javascript
some_condition ? a = b : c = d = e;
Siguiendo las reglas de prioridad del operador, que sería de esperar que sea:
(some_condition ? a = b : c) = d = e;
pero parece que la agrupación es en realidad:
EDIT: (La agrupación original no está claro. Consulte a continuación la actualización)
EDITAR: some_condition ? a = b : (c = d = e);
¿Por qué es esto así? (Y no, no escribí ese código)
EDITAR: Esto parece sugerir que en Javascript para decir ?:
tienen una precedencia mayor que =
no es del todo cierto. Como ejemplo adicional:
x = y ? a = b : c = d = e;
Si ?:
tienen mayor precedencia que =
(como en C), entonces la agrupación habría
x = ((y ? a = b : c) = (d = e));
sino más bien (a partir de las respuestas) lo que tenemos es
x = (y ? a = b : (c = d = e));
La precedencia relativa de ?:
y =
parece depender de donde que aparecen en la expresión
Uh oh, mejor explique la [especificación] (http://es5.github.com/) otra vez ... – zzzzBov
Eso es porque no ha entregado corchetes. Intenta dar corchetes. Debería funcionar como se esperaba. – sgowd
no realmente ... en línea si no requiere corchetes o paréntesis. Consulte la respuesta de Simon West a continuación. – MilkyWayJoe