【ES6】数值Number扩展

[TOC]
ES6在数值Number方面改动:

  • 新增二进制、八进制表示法
  • 新增判断api
    1、Number.isFinite()
    2、Number.isNaN()
    3、Number.isInterger()
    4、Number.isSafeInterger()
  • Math扩展
  • Math.trunc()
  • Math.sign()
  • 其他常用

新增二进制、八进制表示法

ES6 提供了二进制和八进制数值的新的写法

  • 二进制:用前缀0b(或0B)表示,开头第一个是零。 0b0111 ===7 // true
  • 八进制:用前缀0o(或0O)表示,开头第一个是零。0o767 === 503 // true

新增判断api

1、Number.isFinite()

(1)与传统的全局方法isfIinite()区别在于:传统方法是先调用Number()强制将非数值转化成数值再判断,ES6中Number.isFinite()不会自动做转化,对于非数值一律返回false
(2)ES5实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//ES5实现Number.isFinite()
(function (global) {
let globalIsFinite=global.isFinite;//传统的全局isFinite
//把isFinite绑定到Number原型上
Object.defineProperty(Number,'isFinite',{
value: function isFinite(value) {
return typeof value ==='number' && globalIsFinite(value);//必须是number && 满足传统的isFinite()
},
configurable: true,
enumerable: false,
writable: true
})
})(this)
console.log(Number.isFinite('24')) //false

2、Number.isNaN()

(1)与传统的全局方法isNaN()区别在于:传统方法是先调用Number()强制将非数值转化成数值再判断,ES6中Number.isNaN()不会自动做转化,对于非NaN一律返回false
(2)ES5实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//ES5实现Number.isNaN()
(function (global) {
let globalIsNaN=global.isNaN;
Object.defineProperty(Number,'isNaN',{
value: function isNaN(value) {
return typeof value === 'number' && globalIsNaN(value)
},
configurable: true,
enumerable: false,
writable: true
})
})(this)
console.log(Number.isNaN('NaN'))//false

3、Number.isInterger()

判断一个值是否为整数,注意同一个整数用整数和浮点数是同样的存储方法

1
2
3
Number.isInterger(3) //true
Number.isInterger(3.0)//true
Number.isInterger(3.1) //false

4、Number.isSafeInterger()

JavaScript 能够准确表示的整数范围在-2^53到2^53之间(不含两个端点),超过这个范围,无法精确表示这个值。
ES6 引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限。
Number.isSafeInteger()则是用来判断一个整数是否落在这个范围之内,非数值不会自动转换。

1
2
3
4
5
6
7
8
Number.isSafeInteger('a') // false
Number.isSafeInteger(null) // false
Number.isSafeInteger(NaN) // false
Number.isSafeInteger(Infinity) // false
Number.isSafeInteger(-Infinity) // false
Number.isSafeInteger(3) // true 整数
Number.isSafeInteger(1.2) // false 浮点数


Math扩展

Math.trunc()

  • 用于去除一个数的小数部分,返回整数部分

    1
    2
    Math.trunc(4.1) //4
    Math.trunc(-4.1) //-4
  • 对于非数值,Math.trunc内部使用Number方法将其先转为数值

  • 对于空值和无法截取整数的值,返回NaN
  • 对于没有部署这个方法的环境,可以用下面的代码模拟。
    1
    2
    3
    Math.trunc = Math.trunc || function(x) {
    return x < 0 ? Math.ceil(x) : Math.floor(x);
    };

Math.sign()

Math.sign方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。
它会返回五种值:
参数为正数,返回+1;
参数为负数,返回-1;
参数为 0,返回0;
参数为-0,返回-0;
其他值,返回NaN。


其他常用

1、指数运算符:ES2016 新增了一个指数运算符**

1
2
//2的3次方表示
2 ** 3 // 8

a**=b表示a的b次方

热评文章