6. 字面量表示

以 JavaScript 语言为例

1. 十进制 Decimal

常规数字。如下:

10;
1024;
9007199254740991; 

当以 0 开头时,需要注意:若数字有 ≥8 的,就默认是十进制的;但如果数字全是<8 的,则会被当成八进制来解析。如下:

0888; // 888
0775; // 509,会被当成八进制

科学记数法的形式,也称指数字面量。格式是beN,其中 b 是尾数(可以是整数或浮点数),字符e/E表示分隔符或指数指示符,N 是指数(有符号的整数)。如下:

1e1; // 10
1e-3; // 0.001
5e-324; // 5e-324
9e15; // 9000000000000000
1.7976931348623157e+308; // 1.7976931348623157e+308
2.220446049250313e-16; // 2.220446049250313e-16

2. 二进制 Binary

字面量以 0b 或者 0B 开头,这是 ECMAScript 2015 中的新语法。如下:

0b10000111; // 135
0b11111111110; // 2046
0b10000000000; // 1024
0b01111111111; // 1023
0b10000110011; // 1075

如果 0b/0B 后面的值不是 0 和 1,会报语法错误:

0b002001111; // Uncaught SyntaxError: Invalid or unexpected token

3. 八进制 Octal

字面量以 0o 或者 0O 开头,这是 ECMAScript 2015 中的新语法。如下:

0o755; // 493
0o644; // 420

再就是前面“十进制”里提到的,以 0 开头的情况。即便“看起来”是十进制的数字,但如果它们都 <8(即在 0~7 之间)是会被当成八进制来解析的。如下:

0755; // 493
0775; // 509

0o/0O 后面的值不是 0~7,会报语法错误:

0b6339; // Uncaught SyntaxError: Invalid or unexpected token

4. 十六进制 Hexadecimal

字面量以 0x 或者 0X 开头,后跟 0~F。如下:

0x0010; // 16
0x7fe; // 2046
0xffff; // 65535

0x/0X 后面的值不是 0~F,会报语法错误:

0x99EFG; // Uncaught SyntaxError: Invalid or unexpected token

5. 总结

这部分内容比较直观,大约就是所见即所得。对我们的启示就是:

  • 在写进制的时候,前缀 0b/0o/0x 最好不要省略

  • 若是接口返回来的十进制数据,如有必要,保险起见可以手动处理下开头的 0

最后简单提下,Number 类型的字面量如果都在后面加个字符 n 就是 BigInt 类型的了。如下:

755n;
9007199254740992n;
0b11111111110n; // 2046n
0o7556643555n; // 1035683693n
0xffffeeeaaan; // 1099510508202n

唯一不同的就是在 BigInt 里 0755n 不会被当成八进制,因为前缀 o/O 不能省。如下:

0755n; // Uncaught SyntaxError: Invalid or unexpected token
0o755n; //493n

6. 主要参考

Last updated