¿Por qué aaa = 1,2,3
el trabajo y establece el valor de aaa
a 1
?
¿Por qué no var bbb = 1,2,3
funciona?
¿Por qué var bbb = (1,2,3)
el trabajo y establece el valor de bbb
a 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
aaa
se 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,
2
no 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, 3
puede poner entre paréntesis como(a = 1), 2, 3
que 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 = 3
y devuelve 3.(1 + 2) * 3
,1 + 2
se 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
var
declaraciones, que son:(donde
[...]
significa que esa parte es opcional). A suvar
declaració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:
var
declaraciónLa sintaxis de la
var
declaració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, 2
rinde 2aaa = 1
se evalúa primero porque=
tiene mayor prioridad que,
2, 3
rinde 3(1, 2, 3)
rinde3
como se describe arribabbb
se le asigna el valor3
fuente
aaa = 1, 2, 3
=> El operador de coma se utiliza para separar los 3 estados siguientes:aaa=1
,2
y3
. 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 calcula2
y la descarta, luego la calcula3
y la descarta.En el segundo:
La
var
palabra 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
1
y lo ignora. Luego lo evalúa2
y lo ignora. Luego evalúa3
y eso se deja en la pila para que se asigne abbb
Si bien el uso de comas para separar expresiones no es común, a veces es útil en aspectos como el
for
aspecto.fuente