>  기사  >  웹 프론트엔드  >  JavaScript에서 `040`이 `32`와 같은 이유는 무엇입니까?

JavaScript에서 `040`이 `32`와 같은 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-21 14:43:09526검색

Why Does `040` Equal `32` in JavaScript?

JavaScript에서 선행 0 숫자

질문:

JavaScript에서 40이 32로 표현되는 이유는 무엇입니까?

var num = 040;
console.log(num); // 32

정답:

JavaScript에서 숫자는 앞에 0x가 있는 것처럼 앞에 0이 있기 때문에 8진수(기본 8)로 처리됩니다. it 16진수(기본 16)과 동일합니다. 이 동작은 오랜 역사를 가지고 있지만 최신 JavaScript에서는 8진수가 더 이상 이 형식으로 작성되지 않습니다. 엄격 모드를 사용하는 최신 JavaScript에서 "전통적인" 8진수 형식은 0o 접두사를 사용하여 작성해야 하는 구문 오류입니다.

역사:

초기에는(원래 Netscape 언어와 첫 번째 및 두 번째 ECMAScript 사양에서) 숫자 리터럴의 앞에 오는 0이 형식적으로 8진수(기본 8)를 나타냈습니다. ), 앞에 오는 0x가 16진수(기본)을 나타내는 것과 마찬가지로 16):

OctalIntegerLiteral ::
    0 OctalDigit
    OctalIntegerLiteral OctalDigit

예를 들어 10, 012, 0xA는 모두 십진수 10을 나타내는 방식입니다. 이는 구문이 JavaScript와 유사하지만 매우 혼란스러운 일부 다른 언어(예: C, C++ 및 Java)와 일치합니다.

ECMAScript 3부터 이 형식의 8진수 리터럴은 선택적 확장으로 강등되었으며 10진수 정수 리터럴은 선행 0을 가질 수 없도록 변경되었습니다(구현에 확장명이 포함되지 않는 한).

DecimalIntegerLiteral ::
    0
    NonZeroDigit DecimalDigits(opt)

그러나 엄격 모드에서 ECMAScript 5는 다음을 금지합니다.

엄격 모드 코드를 다룰 때(참조 10.1.1), 적합한 구현은 B.1.1에 설명된 대로 OctalIntegerLiteral을 포함하도록 NumericLiteral의 구문을 확장해서는 안 됩니다.

ECMAScript 6(ECMAScript 2015)에는 BinaryIntegerLiteral과 OctalIntegerLiteral이 도입되었으므로 이제 더 일관된 리터럴이 있습니다.

  • BinaryIntegerLiteral(접두사 0b 또는 0B).
  • OctalIntegerLiteral(접두사 0o 또는 0O 포함)
  • HexIntegerLiteral, 접두사가 0x 또는 0X입니다.

이전 OctalIntegerLiteral 확장의 이름이 LegacyOctalIntegerLiteral로 변경되었으며 이는 여전히 비엄격 모드에서 허용됩니다.

결론:

따라서 8진수를 구문 분석하려면 0o 또는 0O 접두사(이전 브라우저에서는 지원되지 않음)를 사용하거나,parseInt를 사용할 수 있습니다.

숫자가 10진수로 구문 분석되도록 하려면 선행 0을 제거하거나 parseInt를 사용하세요.

예: 엄격 모드의

  • 010

    • (ECMAScript 필요) 5) 구문 오류입니다.
    • 비엄격 모드에서는 구문 오류이거나 8을 반환할 수 있습니다(구현에 따라 다름).
  • 0o10, 0O10

    • ECMAScript 6 이전에는 구문 오류였습니다.
    • ECMAScript 6에서는 8을 반환합니다.
  • parseInt('010', 8)

    • 8을 반환합니다.
  • parseInt('010', 10)

    • 10을 반환합니다.

관심이 있으시면 여기에서 현재 최신 사양과 여기에서 이전 버전을 찾아보실 수 있습니다.

위 내용은 JavaScript에서 `040`이 `32`와 같은 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.