왜 aaa = 1,2,3
작동하고 값을 aaa
로 설정 1
합니까?
왜 작동하지 var bbb = 1,2,3
않습니까?
왜 var bbb = (1,2,3)
작동하고 값을 bbb
로 설정 3
합니까?
왜 aaa = 1,2,3
작동하고 값을 aaa
로 설정 1
합니까?
왜 작동하지 var bbb = 1,2,3
않습니까?
왜 var bbb = (1,2,3)
작동하고 값을 bbb
로 설정 3
합니까?
답변:
여기에는 많은 일이 있지만 기본적으로 쉼표 연산자가 있습니다.
쉼표 연산자는 두 피연산자 (왼쪽에서 오른쪽으로)를 모두 평가하고 두 번째 피연산자의 값을 반환합니다.
이 코드 :
aaa = 1,2,3
다음과 동일합니다.
aaa = 1;
2;
3;
따라서 aaa
암시 적으로 선언되고 값 1이 할당됩니다. 콘솔의 출력은 마지막 명령문 3의 결과입니다.
이 코드 :
var bbb = 1,2,3
변수 선언의 쉼표는 한 줄에 여러 변수를 선언하는 데 사용되므로 구문 오류입니다. MDN 기사에서 지적했듯이
에서 쉼표주의
var
문이 되지 는 식 내에 존재하지 않기 때문에, 쉼표 연산자. 오히려var
여러 개를 하나로 결합하는 것은 명령문 의 특수 문자입니다 .
따라서이 코드는 대략 다음과 같습니다.
var bbb = 1;
var 2;
var 3;
물론 2
은 유효한 식별자가 아니므로 해당 지점에서 실패합니다.
이 코드 :
var bbb = (1,2,3)
숫자 값이 괄호로 묶여 있기 때문에 먼저 평가된다는 점을 제외하면 첫 번째 값과 매우 유사합니다. 따라서 이것은 다음과 거의 동일합니다.
1;
2;
var bbb = 3;
=
에서가 var bbb = 1;
아니라 동일 =
같이 aaa = 1;
- 그들은 문법에 다른 작품에서 (AssignmentExpression 대 Initialiser를) 와서 그냥 같은 토큰을 사용하는 일이.
a = 1, 2, 3
것으로 괄호로 묶을 수 있다는 (a = 1), 2, 3
것입니다 a = 1; 2; 3
(그리고 3을 반환합니다. 예를 들어 b = (a = 1, 2, 3)
b에 3을 할당합니다). 반대로,로 a = (1, 2, 3)
평가 1; 2; a = 3
하고 3을 반환합니다.
(1 + 2) * 3
의를 1 + 2
먼저 평가하고, 그 표현의 결과는 평가의 나머지 부분에 대한 외부 표현으로 다시 대체됩니다.
쉼표는 Javascript에서 여러 용도로 사용됩니다. 표현에서 :
a = 1, 2, 3;
단순히 오른쪽 인수를 반환하는 연산자입니다. 그러나 다음과 같은 var
선언 구문의 일부이기도합니다 .
var var1 [ = val1 ], var2 [ = val2 ], var3 [ = val3 ], ...;
(여기서 [...]
해당 부분은 선택 사항임을 의미). 귀하 var
는 구문 분석하지 않도록 선언은 쉼표 후 변수 이름이 없습니다. 다음과 같이 원하는 효과를 얻을 수 있습니다.
var a = (1, 2, 3);
괄호는 쉼표가 변수 선언 사이의 구분 기호가 아닌 연산자로 처리되도록합니다.
귀하의 예에서 쉼표는 두 가지 컨텍스트에서 사용됩니다.
var
성명서의 구문 var
문은 다음과 같습니다
var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
여기서 쉼표는 변수 이름-값 쌍을 구분하는 데 사용됩니다. 다음은 변수 이름이 숫자로 시작할 수 없기 때문에 작동하지 않습니다 ( 식별자 이름 참조 ).
var bbb = 1, 2, 3;
// SyntaxError: Unexpected number
쉼표 연산자는 두 피연산자 (왼쪽에서 오른쪽으로)를 모두 평가하고 두 번째 피연산자의 값을 반환합니다. 다음 표현식은 다음과 같이 작동합니다.
aaa = 1, 2, 3;
aaa = 1, 2
2를 산출
aaa = 1
평가가 먼저 때문에이 =
보다 더 높은 우선 순위가,
2, 3
3을 산출var bbb = (1, 2, 3);
(1, 2, 3)
산출 3
됩니다.bbb
에 값이 할당됩니다.3
aaa = 1, 2, 3
=> 쉼표 연산자는 aaa=1
, 2
및 3
. 쉼표 연산자의 결과는 마지막 문 3의 값입니다. 그러나 OP의 스크린 샷에서 명확하게 볼 수 있듯이 aaa에는 값 1이 할당됩니다. 그 이유는 쉼표 연산자의 우선 순위가 가장 낮은 연산자 우선 순위 때문입니다.
첫 번째 경우 :
aaa = 1,2,3
쉼표는 표현식 구분 기호로 사용됩니다. 에 대한 할당을 수행 한 aaa
다음 계산 2
및 폐기 한 다음 계산 3
및 폐기합니다.
두 번째 :
var bbb = 1,2,3
var
키워드는 후 다음 일을하는 자바 스크립트 컴파일러에 알려줍니다 ,
다른 변수 이름이어야합니다. 찾지 못해서 죽고 개그를칩니다.
var bbb = (1,2,3)
여기서 컴파일러는 먼저이를 평가 1
하고 무시합니다. 그런 다음 평가 2
하고 무시합니다. 그런 다음 평가 3
하고 스택에 남아 있으므로bbb
쉼표를 사용하여 표현식을 구분하는 것은 일반적이지 않지만 for
외모 와 같은 경우에 유용합니다 .
for (i = 0, l = 10; i < l; i++) {
console.log(i);
}
var a1,a2,a3;
단순히 세 개의 지역 변수를 선언합니다.