019 > 020
JavaScript 콘솔 (Chrome과 Firefox에서 테스트 됨)에 입력 하면 대답을 얻습니다 true
.
이것은 때문이다 020
으로 해석되고 OctalIntegerLiteral
(등호 16
반면에) 019
분명히으로 해석되고있다 DecimalLiteral
(와 동일 19
). 으로 19
보다 큰 16
, 019 > 020
이다 true
.
나를 당혹스럽게 019
하는 DecimalLiteral
것은 처음으로 해석되는 이유 입니다 . 어떤 생산입니까? DecimalIntegerLiteral
허용하지 않음 019
:
DecimalIntegerLiteral ::
0
NonZeroDigit DecimalDigits_opt
OctalIntegerLiteral
또한 허용하지 않습니다 019
( 9
8 진수가 아니므로) :
OctalIntegerLiteral ::
0 OctalDigit
OctalIntegerLiteral OctalDigit
OctalDigit :: one of
0 1 2 3 4 5 6 7
그래서 제가 사양에서 본 019
것은 실제로 거부되어야합니다. 왜 그것이 십진 정수로 해석되는지 모르겠습니다.
여기에 어떤 종류의 호환성 규칙이 있다고 생각하지만 공식적인 정의를 찾지 못했습니다. 누구든지 이것으로 나를 도울 수 있습니까?
(이것이 필요한 이유 : JavaCC를 사용하여 Java 용 JavaScript / ECMAScript 파서를 개발 중이며 사양 및 그 편차에 특별한주의를 기울여야합니다.)
019 + 0 == 19
그리고020 + 0 == 17
이 아닌 8 진수가 포함 된 경우 그래서 앞의 0을 무시합니다.