¿Por qué aaa = 1,2,3el trabajo y establece el valor de aaaa 1?
¿Por qué no var bbb = 1,2,3funciona?
¿Por qué var bbb = (1,2,3)el trabajo y establece el valor de bbba 3?

javascript
syntax
Shankar Cabus
fuente
fuente

var a1,a2,a3;simplemente declarará tres variables locales.Respuestas:
Están sucediendo muchas cosas aquí, pero básicamente todo se reduce al operador de coma .
Este código:
Es equivalente a:
Entonces
aaase declara implícitamente y se le asigna un valor de 1. Observe que la salida en la consola es el resultado de la última declaración, 3.Este código:
Es un error de sintaxis porque las comas en las declaraciones de variables se utilizan para declarar múltiples variables en una sola línea. Como señala el artículo de MDN,
Entonces este código es aproximadamente equivalente a:
Por supuesto,
2no es un identificador válido, por lo que falla en ese punto.Este código:
Es muy similar al primero, excepto porque los valores numéricos están entre paréntesis, se evalúan primero. Entonces esto es aproximadamente equivalente a:
fuente
=invar bbb = 1;no es el mismo que el=inaaa = 1;: provienen de diferentes producciones (Initialiser vs AssignmentExpression) en la gramática y simplemente usan el mismo token.a = 1, 2, 3puede poner entre paréntesis como(a = 1), 2, 3que se evalúa comoa = 1; 2; 3(y devuelve 3, por ejemplob = (a = 1, 2, 3), asignaría 3 a b). Por el contrario, sea = (1, 2, 3)evalúa como1; 2; a = 3y devuelve 3.(1 + 2) * 3,1 + 2se evalúa primero y el resultado de esa expresión se sustituye de nuevo en la expresión externa para el resto de la evaluación.La coma tiene múltiples usos en Javascript. En la expresión:
es un operador que simplemente devuelve su argumento de la derecha. Pero también es parte de la sintaxis de las
vardeclaraciones, que son:(donde
[...]significa que esa parte es opcional). A suvardeclaración le faltan los nombres de las variables después de las comas, por lo que no analiza. Puede obtener el efecto que desea con:Los paréntesis obligan a que las comas se traten como operadores en lugar de como delimitadores entre declaraciones de variables.
fuente
En sus ejemplos, la coma se usa en dos contextos:
vardeclaraciónLa sintaxis de la
vardeclaración es:Aquí, la coma se usa para separar pares de nombre-valor de variable. Lo siguiente no funcionará porque un nombre de variable no puede comenzar con un dígito (ver nombres de identificadores ):
Operador de coma
El operador de coma evalúa ambos operandos (de izquierda a derecha) y devuelve el valor del segundo operando. Las siguientes expresiones funcionan de la siguiente manera:
aaa = 1, 2rinde 2aaa = 1se evalúa primero porque=tiene mayor prioridad que,2, 3rinde 3(1, 2, 3)rinde3como se describe arribabbbse le asigna el valor3fuente
aaa = 1, 2, 3=> El operador de coma se utiliza para separar los 3 estados siguientes:aaa=1,2y3. El resultado del operador de coma es el valor de la última declaración 3. Sin embargo, aaa se le asigna el valor de 1, como se puede ver claramente en la captura de pantalla del OP. La razón de esto es la precedencia del operador, y el operador coma tiene la precedencia más baja.En el primer caso:
aaa = 1,2,3
las comas sirven como separadores de expresiones. Realiza una asignación
aaa, luego la calcula2y la descarta, luego la calcula3y la descarta.En el segundo:
La
varpalabra clave le dice al compilador de Javascript que lo siguiente después de,debe ser otro nombre de variable. No está encontrando, por lo que muere y se atraganta.Aquí, el compilador primero lo evalúa
1y lo ignora. Luego lo evalúa2y lo ignora. Luego evalúa3y eso se deja en la pila para que se asigne abbbSi bien el uso de comas para separar expresiones no es común, a veces es útil en aspectos como el
foraspecto.fuente