本記事では、ES6で8進数と2進数のリテラルを表現する方法について解説します。
ES5では、8進数(接頭辞0)、10進数(接頭辞なし)、16進数(0x)で数値リテラルを提供していましたが、ES6では、2進数リテラルのサポートが追加され、8進数リテラルの表現方法が変更されました。
8進数リテラル
ES5で8進数のリテラルを表現するには、接頭辞の0に続いて8進数の数字(0から7まで)を並べます。
let a = 051;
console.log(a); // 41
8進数リテラルに範囲外の数値が含まれている場合、JavaScriptは先頭の0を無視し、次の例に示すように8進数リテラルを10進数として扱います。
let b = 058; // invalid octal
console.log(b); // 58
この例では、8は8進数を表すのに無効な数字なので、JavaScriptは0を無視し、58という値を持つ10進数として整数を扱います。
8進数のリテラルは非厳密モードで使用できることに注意してください。strictモードで使用すると、JavaScriptはエラーを投げます。
"use strict"
let b = 058; // invalid octal
console.log(b);
以下は、そのエラーメッセージです。
SyntaxError: Decimals with leading zeros are not allowed in strict mode.
ES6では、接頭辞0oの後に0から7までの8進数の数字を並べることで、8進数リテラルを指定することができます。
let c = 0o51;
console.log(c); // 41
8進数リテラルに無効な数値を使用した場合、JavaScriptは次の例のようにSyntaxErrorを投げます。
let d = 0o58;
console.log(d); // SyntaxError
2進数リテラル
ES5では、JavaScriptは2進数のリテラル形式を提供していませんでした。
2進数の文字列をパースするには、以下のようにparseInt()関数を使用します。
let e = parseInt('111',2);
console.log(e); // 7
ES6では、接頭辞0bの後に2進数(0と1)を続けて使うことで、2進数リテラルをサポートするようにしました。
let f = 0b111;
console.log(f); // 7
まとめ
- 8進数のリテラルは、0oから始まり、0から7までの数字が連続する
- 2進数リテラルは、0bで始まり、0と1の数値が続く