构造函数

Number是 JavaScript 的原生对象,同时也是一个构造函数,可以用它生成新的数字。不推荐使用,原因见 后面的包装对象一节。

Number 常量

Number.EPSILON

Number.EPSILON是一个数值很小的常量:

  1. Number.EPSILON == 2.220446049250313e-16; // true

可以用来准确比较浮点值。
例如:

  1. 0.1 + 0.2 === 0.3; // false

可以借助Number.EPSILON进行准备比较:

  1. function epsEqu(x, y) {
  2. return Math.abs(x - y) < Number.EPSILON;
  3. }
  4. console.log(epsEqu(0.1+0.2, 0.3)); // true

Number 的静态方法

直接定义在 Number 对象上的方法。

isFinite() 是否为有限值 ES6

Number.isFinite()方法用来确定传递的值是否为有限值。

使用示意:

  1. Number.isFinite(Infinity); // false
  2. Number.isFinite(NaN); // false
  3. Number.isFinite(-Infinity); // false
  4. Number.isFinite(0); // true
  5. Number.isFinite(2e64); // true
  6. Number.isFinite('0'); // false, 全局的isFinite('0')返回值是true
  7. Number.isFinite(null); // false, 全局的isFinite(null)返回值是true

如果想要在低版本浏览器中使用,可以引入下面这段JavaScript脚本:

  1. if (Number.isFinite === undefined) Number.isFinite = function(value) {
  2. return typeof value === 'number' && isFinite(value);
  3. }

isNaN() ES6

Number.isNaN()方法用来判断参数x是否是NaN,同时类型是Number,这是一个比最初的、全局的isNaN()方法更健壮的版本。

  1. Number.isNaN(NaN); // true
  2. Number.isNaN(Number.NaN); // true
  3. Number.isNaN(0 / 0); // true
  4. // 下面这些参数如果使用全局的isNaN()方法都是返回true
  5. Number.isNaN('NaN'); // false
  6. Number.isNaN(undefined); // false
  7. Number.isNaN({}); // false
  8. Number.isNaN('blabla'); // false
  9. // 下面的全部返回false
  10. Number.isNaN(true);
  11. Number.isNaN(null);
  12. Number.isNaN(37);
  13. Number.isNaN('37');
  14. Number.isNaN('37.37');
  15. Number.isNaN('');
  16. Number.isNaN(' ');

此方法并不是所有浏览器都支持的,需要打个小补丁:

  1. Number.isNaN = Number.isNaN || function isNaN(input) {
  2. return typeof input === 'number' && input !== input;
  3. }

Number.parseFloat和Number.parseIntES6

语法如下:

  1. Number.parseFloat(string)
  2. Number.parseInt(string, radix)

Number.parseFloat方法和全局的parseFloat方法是一样的方法。

  1. Number.parseFloat === parseFloat; // true

Number.parseInt方法和全局的parseInt方法是一样的方法。

  1. Number.parseInt === parseInt; // true

Number.isInteger 是否整数 ES6

JavaScript只有浮点数(双精度)。因此,整数只是不带小数的浮点数。

Number.isInteger()方法可以判定数字是不是没有小数,如果没有,则返回true。

  1. Number.isInteger(0); // true
  2. Number.isInteger(1); // true
  3. Number.isInteger(-100000); // true
  4. Number.isInteger(99999999999999999999999); // true
  5. Number.isInteger(0.1); // false
  6. Number.isInteger(Math.PI); // false
  7. Number.isInteger(NaN); // false
  8. Number.isInteger(Infinity); // false
  9. Number.isInteger(-Infinity); // false
  10. Number.isInteger('10'); // false
  11. Number.isInteger(true); // false
  12. Number.isInteger(false); // false
  13. Number.isInteger([1]); // false
  14. Number.isInteger(5.0); // true
  15. Number.isInteger(5.000000000000001); // false
  16. Number.isInteger(5.0000000000000001); // true

由于是新特性,不是所有浏览器都支持这个方法,如果想要额外兼容下,可以参考下面的语句:

  1. Number.isInteger = Number.isInteger || function(value) {
  2. return typeof value === 'number' &&
  3. isFinite(value) &&
  4. Math.floor(value) === value;
  5. };

ES6
ES6
ES6

Number 的实例方法

实例方法就是定义在Number原型对象Object.prototype上的方法。它可以被Number实例直接使用。

toFixed

toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。

假设要四舍五入的数字为number,要保留n位小数,可以先用 ,然后用 Math.round()取整,最后在除去,间接实现四舍五入。另外toFixed()还有个自动补零的功能,也要实现一下,故下面简单封装了一个toFixed方法来实现四舍五入。

  1. function toFixed(number, m) {
  2. if (typeof number !== 'number') {
  3. throw new Error("number不是数字");
  4. }
  5. let result = Math.round(Math.pow(10, m) * number) / Math.pow(10, m);
  6. result = String(result);
  7. if (result.indexOf(".") == -1) {
  8. if(m != 0){
  9. result += ".";
  10. result += new Array(m + 1).join('0');
  11. }
  12. } else {
  13. let arr = result.split('.');
  14. if (arr[1].length < m) {
  15. arr[1] += new Array(m - arr[1].length + 1).join('0')
  16. }
  17. result = arr.join('.')
  18. }
  19. return result
  20. }