Introduced in ES12, an underscore (_
) can be used as a numeric separator to act as a visual separation between groups of digits. The purpose of having numeric separators is to improve readability of numeric literals. For example:
// ES12+ const million = 1_000_000; console.log(million); // 1000000 console.log(million === 1000000); // true
You can actually use numeric separators with all kinds of numeric literals to improve readability:
// ES12+ const decimal = 1_000.123_456; console.log(decimal); // 1000.123456 console.log(decimal === 1000.123456); // true
// ES12+ const bigint = 1_234_567n; console.log(bigint); // 1234567n console.log(bigint === 1234567n); // true
// ES12+ const hex = 0x6F_3A_45; console.log(hex); // 7289413 console.log(hex === 0x6F3A45); // true
// ES12+ const oct = 0o123_456; console.log(oct); // 42798 console.log(oct === 0o123456); // true
// ES12+ const binary = 0b0101_0110; console.log(binary); // 86 console.log(binary === 0b01010110); // true
The order of the underscores can be whatever you want it to be; it does not need to be in a set sequence or pattern:
const phoneNumber = 1_123_4567;
Do not use number separators directly with parsing functions (such as Number()
, parseInt()
, parseFloat()
, etc.) as they would yield unexpected results.
The following are not allowed and would raise an error:
// SyntaxError: Only one underscore is allowed as numeric separator
100__000;
// SyntaxError: Numeric separators are not allowed at the end of numeric literals
100_;
// SyntaxError: Numeric separator can not be used after leading 0
0_100;
// SyntaxError: Invalid or unexpected token
1e_14;
// SyntaxError: Invalid or unexpected token
1_.23;
// SyntaxError: Invalid or unexpected token
1._23;
This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.