¿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?
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.
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
El operador coma evalúa cada uno de sus operandos (de izquierda a derecha) y devuelve el valor del último operando.
Https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Expressions_and_Operators#comma_operator
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;
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++) {
....
}
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