¿Por qué javascript acepta comas en sentencias if?


Me topé con alguna sintaxis de javascript que parecía que debería producir un error de análisis de algún tipo, pero no lo hace:

if (true, true) {console.log('splendid')} else {console.log('horrid')} // splendid
if (true, false) {console.log('splendid')} else {console.log('horrid')} // horrid

Parece que solo la última expresión afecta a la lógica, aunque todas las expresiones se ejecutan:

if  (console.log('super'), true) {console.log('splendid')} // super splendid

¿Alguien sabe por qué es válida la sintaxis de javascript? ¿Tiene algún uso práctico?

Author: Matt, 2011-03-18

4 answers

El operador coma encadena múltiples expresiones juntas, y el resultado de la operación es el valor del último operando. El único uso real para él es cuando usted necesita efectos secundarios múltiples ocurrir, tal como asignación o llamadas de la función.

 50
Author: Ignacio Vazquez-Abrams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-18 04:16:03
 29
Author: Adam Ayres,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-20 01:37:18

Las comas en javascript son bastante arcanas. El uso más fresco que he visto es este

while(doSomething(), checkIfSomethingHappened());

La más común sería la forma en que se usa var en js

var foo = 1,
    bar = 2;
 15
Author: Matt Briggs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-18 04:18:25

Esto también es lo mismo que en la mayoría de los otros lenguajes de programación donde puede tener varios iteradores en un bucle.

int x,y;
for(x = 0, y = 0; x < 10 || y < 100; x++, y++) {
....
}
 6
Author: Suroot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-18 04:19:33