ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript が先頭にゼロが付いた数値を 8 進数として扱うのはなぜですか?

JavaScript が先頭にゼロが付いた数値を 8 進数として扱うのはなぜですか?

DDD
DDDオリジナル
2024-10-31 08:31:29936ブラウズ

Why Does JavaScript Treat Numbers with Leading Zeros as Octal?

JavaScript での先行ゼロ付き数値の扱い: 謎を明らかにする

JavaScript では、先行ゼロ付き数値は 8 進数値として解釈されます。予期せぬ結果をもたらします。この動作を理解するために、その歴史を詳しく見てみましょう。

歴史的背景

当初、JavaScript では先頭にゼロを付けたリテラルを 8 進数として解析できました。ただし、この動作は ECMAScript 5 の厳密モードでは非推奨となり、構文エラーがスローされるようになりました。その結果、JavaScript は特定の接頭辞を使用して 10 進数と 8 進数を区別するようになりました:

  • 10 進数: 先頭にゼロまたは先頭にゼロ以外の数字はありません
  • 8 進数: プレフィックス 0o または 0O (ECMAScript 6 で導入)

従来の 8 進数構文

8 進数解析の非推奨にもかかわらず厳密モードでは先頭にゼロが付きますが、この古い動作は非厳密モードでも引き続き許可されます。これにより、互換性の問題や予期しない結果が生じる可能性があります。

解決策

先頭にゼロが付いている数値が 8 進数として解釈されないようにするには、次の 2 つの主な方法があります。

  1. 先頭のゼロを削除します: 数値リテラルから先頭のゼロを削除して、数値が 10 進数値として扱われるようにします。
  2. 10 進数ベースの ParseInt を使用します。 : parseInt 関数を使用して数値を解析し、基数を 10 (10 進数) として指定して、期待される 10 進数の解釈を確実にします。

先行ゼロの影響を説明するには、次の例を考えてください。厳密モードの

  • 010 はエラーをスローします。非厳密モードの
  • 010 は 8 を返す場合があります (実装によって異なります)。 ).
  • 0o10 または ECMAScript 6 の 0O10 は 8 を返します。
  • parseInt('010', 8) は 8 を返します (8 進数として扱います)。
  • parseInt('010 ', 10) は 10 を返します (10 進数として扱います)。

これらの解決策に従うことで、曖昧さを防ぎ、数値が目的の基数に従って一貫して解釈されるようにすることができます。

以上がJavaScript が先頭にゼロが付いた数値を 8 進数として扱うのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。