数值的表示

380 阅读3分钟

这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战

前言

ECMAScript 6.0 简称ES6 , 是 JavaScript 语言的新一代的标准,于在 2015 年 6 月发布,正式名称就是《ECMAScript 2015 标准》。一般情况,泛指, 5.1版以后的标准,涵盖了 ES2015、ES2016、ES2017、ES2018、ES2019、ES2020、ES2021 等等

我们一起来学习

  • 2进制表示
  • 8进制表示
  • 16进制表示
  • 数值分割符号

先练习一下

console.log(0b10001)
console.log(0B10001)
console.log(021);
console.log(0o21);
console.log(0O21)
console.log(17);
console.log(0x11);
console.log(1_7);
console.log(17n);





答案:

console.log(0b10001)   // 17  ES6 二进制写法
console.log(0B10001)   // 17  ES6 二进制写法
console.log(021);      // 17  八进制写法
console.log(0o21);     // 17  ES6 八进制写法
console.log(0O21);     // 17  ES6 八进制写法
console.log(17);       // 17  十进制
console.log(0x11);     // 17  十六进制
console.log(0X11);     // 17  十六进制
console.log(1_7);      // 17  数值分隔符写法
console.log(17n);      // 17n BigInt

这里分别有二进制,八进制,十进制,十六进制**四种进制** 八种写法, 我们一起来看看吧。

0b(0B) 开头 二进制写法

ob或者oB开头,表示二进制写法,实际打印输出的时候,是10进制的值。

获取二进制,当然也很简单:

17..toString(2)  // '10001'

0o(0O) 或者 0开头 八进制写法

oo,oO或者0开头,表示八进制写法。
获取二进制,当然也很简单:

17..toString(8)  // '21'

大家可还记得字符表示,可以使用8进制?

"\141"  // 'a'

怎么获得这个值呢? 也很简单:

"a".codePointAt(0).toString(8)  // '141'

唯一需要注意的一点就是严格模式下, 0开头表示8进制,会报错。

function logStrict(){
    "use strict"
    console.log(021);
}
// Uncaught SyntaxError: Octal literals are not allowed in strict mode.
function log(){
    console.log(021);
}

我在最新的chrome浏览器下测试, 其报错并不是执行阶段,语法解析阶段就报错了。

0x(0X) 开头 十六进制写法

ox,oX开头,表示十六进制写法。
十六进制我们可不少见,字符里面非常常见:

var regZH = /[\u4e00-\u9fa5]/g;   // 正则

' a '.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '')   // 正则
 
a::before { content: "\20020:";  }   

.bg { color: #FFF }  // 颜色

怎么获得这个值呢? 也很简单:

"a".codePointAt(0).toString(16)  // '61'

数值分隔符

下划线(_)作为分隔符, 可以理解为占位符。 小数部分也可, 不限于10进制,其他进制也可用

1_0      // 10
1_0.1_0  // 10.1

0b1_0    // 2

一个很有用的用途,就是让数字好读, 比如最经典的千分位,也就是这个作用

1_000_000_000  // 很好读

注意事项:

  • 不能放在数值的最前面(leading)或最后面(trailing)。
_101  
//  VM8290:1 Uncaught ReferenceError: _101 is not defined
101_
// Uncaught SyntaxError: Numeric separators are not allowed at the end of numeric literals
  • 不能两个或两个以上的分隔符连在一起。
1__1
// Uncaught SyntaxError: Only one underscore is allowed as numeric separator
  • 小数点的前后不能有分隔符。
1_.01 
// Uncaught SyntaxError: Numeric separators are not allowed at the end of numeric literals
1._01
// Uncaught SyntaxError: Invalid or unexpected token
  • 科学计数法里面,表示指数的eE前后不能有分隔符。
1_e2
// Uncaught SyntaxError: Numeric separators are not allowed at the end of numeric literals
1e_2
// Uncaught SyntaxError: Invalid or unexpected token
  • 不能紧跟着进制的前缀0b0B0o0 0O0x0X
0b_100
// Uncaught SyntaxError: Invalid or unexpected token
0_10
// Uncaught SyntaxError: Numeric separator can not be used after leading 0.

小结

今天你收获了吗?

引用

数值的扩展