[javascript] 0.-5가 -5로 평가되는 이유는 무엇입니까?

내가 쓰는 가정 0.5으로 0.-5예상치 못한 방법으로,하지만 여전히 실행할 수 있습니다. 계속 실행되고 -5로 평가되기 위해 0.in 0.-5은 무엇을 합니까?

나는 또한 시도 alert(0.-5+1)인쇄 -4, 자바 스크립트를 무시 않는 0.에서 0.-5?



답변

a 뒤의 후행 숫자 .는 선택 사항입니다.

console.log(0. === 0); // true

그래서

0.-5

평가하다

0 - 5

그것은 단지 -5입니다. 비슷하게,

0.-5+1

이다

0 - 5 + 1

그것은

-5 + 1

또는 -4.


답변

0.-5성공적으로 파싱 할 수있다 0.[1] , -5. 다음은 AST 탐색기에서 생성 된 표현식의 추상 구문 트리입니다.

AST 탐색기에서 생성 한 구문 분석 트리

이것은 (예기치 않은 방식으로) 유효한 JavaScript이며 -5.


[1] 숫자 리터럴의 문법에 따르면 십진수와 지수 부분은 선택 사항입니다.

NumericLiteral ::
  DecimalLiteral
  […]

DecimalLiteral ::
  DecimalIntegerLiteral. DecimalDigits opt ExponentPart opt


답변

JS에서는 선택적 소수점으로 숫자를 표현할 수 있습니다.

x = 5.;    //5
x = 5. + 6.   //11

그리고 Tvde1의 의견에 따라 모든 Number 메서드도 적용 할 수 있습니다.

5..toString()

이 구문을 사용하면 괄호없이 숫자 함수를 실행할 수 있습니다.

5.toString() //error
(5).toString() //good
5..toString() //good
5 .toString() // awesome

이유를 알아 보려면 질문을 참조하십시오 .


답변

진짜 답은 소수점이 아니라 마이너스 부호에 관한 것이라고 생각합니다. 앞에 숫자처럼 보이는 것이 있으면 연산자로 해석되지 않습니까?


답변

console.log(0. - 5)      // -5
console.log(0 - 5)       // -5
console.log('0.' - 5)    // -5
console.log('0' - 5)     // -5
console.log(0.-5 === -5) // true

‘0.’ 또는 ‘0’은 유형이 숫자에 대해 고유하기 때문에 JavaScript에서 동일합니다. 빼기 연산자는 숫자 사이에 있으므로 항상 전달하는 것을 숫자로 변환하십시오. Python에서는 여러 유형이 있기 때문에 첫 번째는 Float이고 두 번째는 Integer입니다.


답변