はい、const num1 = 08;
という記述はTypeScriptでエラーになります。12
TypeScriptでは、先頭に0がついた数値リテラルは8進数として解釈されます。しかし、8進数は0から7までの数字しか使えないため、08
という表記は無効です。TypeScriptはこれを検出し、次のようなエラーを表示します:
Octal literals are not allowed in strict mode.
正しく数値を表現するには、以下のいずれかの方法を使用します:
10進数として表記する場合は先頭の0を削除:
const num1 = 8;
明示的に8進数として表記する場合は、ES6の構文を使用:
const num1 = 0o10; // 8進数の10は10進数の8
TypeScriptは静的型チェッカーとして、このような潜在的なバグを実行前に検出します。2
はい、ES6以降でも const num1 = 08;
という記述はエラーになります。1
ES6(ECMAScript 2015)では、JavaScriptの厳格モード(strict mode)が標準となり、従来の先頭に0をつけた8進数表記(例:01
, 02
など)は正式に廃止されました。代わりに、8進数を表現するには 0o
または 0O
プレフィックスを使用する新しい構文が導入されました。1
したがって、ES6以降では:
const num1 = 08;
はエラーになります。これは先頭の0が8進数を示唆していますが、8進数には8という数字が存在しないためです。正しい8進数表記は次のようになります:
const num1 = 0o10; // 8進数の10(10進数の8)
単に10進数の8を表現したい場合は:
const num1 = 8;
TypeScriptはECMAScriptの仕様に準拠しているため、この動作はJavaScriptとTypeScriptの両方で同じです。2