IT story

-1 ** 2가 JavaScript에서 구문 오류 인 이유는 무엇입니까?

hot-time 2020. 12. 29. 07:52
반응형

-1 ** 2가 JavaScript에서 구문 오류 인 이유는 무엇입니까?


브라우저 콘솔에서 실행하면 SyntaxError: Unexpected token **. 노드에서 시도 :

> -1**2
...
...
...
...^C

나는 이것이 **전력 연산자 가있는 산술 표현식이라고 생각했습니다 . 다른 운영자에게는 그러한 문제가 없습니다.

이상하게도 */두 번째 줄에 입력 하면 실행이 트리거됩니다.

> -1**2
... */
-1**2
  ^^
SyntaxError: Unexpected token **

여기서 무슨 일이 일어나고 있습니까?


브라우저 콘솔에서 실행하면 SyntaxError : Unexpected token **이 표시됩니다.

그것이 사양 이기 때문 입니다. 1의 부정의 제곱인지 (예 (-1) ** 2:) 또는 1의 제곱의 부정인지 (예 :) 혼동을 피하기 위해 그렇게 설계되었습니다 -(1 ** 2). 이 디자인은 연산자 우선 순위에 대한 광범위한 논의 와 이것이 다른 언어에서 어떻게 처리되는지 조사한 결과로, 마지막으로 이것을 구문 오류로 만들어 예기치 않은 동작을 방지하기로 결정했습니다.


MDN에 대한 문서에서 :

JavaScript에서는 모호한 지수 표현을 작성하는 것이 불가능합니다. 즉 , 기본 숫자 바로 앞에 단항 연산자 ( +/ -/ ~/ !/ delete/ void/ typeof)를 넣을 수 없습니다 .

그 이유는 동일한 텍스트에서도 설명됩니다.

PHP 및 Python과 같은 대부분의 언어와 지수 연산자 (일반적으로 ^또는 **) 가있는 다른 언어 에서 지수 연산자는 단항 +및 단항과 같은 단항 연산자보다 우선 순위가 높은 것으로 정의 -되지만 몇 가지 예외가 있습니다. 예를 들어 Bash에서 **연산자는 단항 연산자보다 낮은 우선 순위를 갖도록 정의됩니다.

따라서 혼동을 피하기 위해 코드는 모호함을 제거하고 괄호를 명시 적으로 넣어야한다고 결정했습니다.

(-1)**2

또는:

-(1**2) 

참고로 바이너리 - 는 우선 순위가 낮은 방식으로 처리되지 않으므로 마지막 표현식은이 유효한 표현식과 동일한 결과를 갖습니다.

0-1**2

다른 프로그래밍 언어의 지수화 우선 순위

위의 인용문에서 이미 확인했듯이 중위 지수 연산자가있는 대부분의 프로그래밍 언어는 단항 마이너스보다 해당 연산자에 더 높은 우선 순위를 부여합니다.

다음은 단항 빼기 연산자에 더 높은 우선 순위를 부여하는 프로그래밍 언어의 몇 가지 다른 예입니다.

참조 URL : https://stackoverflow.com/questions/43556752/why-is-12-a-syntax-error-in-javascript

반응형