program tip

쉼표로 할당해도 작동합니까?

radiobox 2020. 8. 5. 08:06
반응형

쉼표로 할당해도 작동합니까?


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

반응형