쉼표로 할당해도 작동합니까?
왜 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;
쉼표는 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
다음이를 계산 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);
}
참고 URL : https://stackoverflow.com/questions/22773463/does-assignment-with-a-comma-work
'program tip' 카테고리의 다른 글
enum과 int / String 사이를 편리하게 매핑 (0) | 2020.08.06 |
---|---|
JavaScript로 메타 태그에서 정보를 얻으려면 어떻게해야합니까? (0) | 2020.08.06 |
Django 템플릿에서 중첩 for 루프로 가장 바깥 쪽 forloop.counter에 액세스하는 방법은 무엇입니까? (0) | 2020.08.05 |
노드 bin 스크립트를 실행할 때 명령 행 작업 디렉토리 결정 (0) | 2020.08.05 |
NSURL을 로컬 파일 경로로 변환 (0) | 2020.08.05 |