声明定义

new Number(num)

* 通过 .valueOf() 获取数字类型的原始值

**_desc_** 对象创建数字类型 _**params**_ { number } num _**return**_ { object }

  1. var num = new Number(100);
  2. console.log(num); // Number {100}
  3. console.log(num.valueOf()); // 100

字面量 👍

_**return**_ { number }

  1. var num = 100;
  2. console.log(num); // 100

NaN

not a number 一种特殊的数字类型

* 任意 NaN 的值都是不相同的
* 判断变量是否是 NaN 不能使用 ==/===,应使用 Number.isNaN 或者 Object.is 进行判断

进制

十进制

  1. var num = 100;
  2. console.log(num); // 100

二进制

* 以 **0b** 开头的数字

  1. var num = 0b111;
  2. console.log(num); // 7

八进制

* 以 **0o** 开头的数字

  1. var num = 0o100;
  2. console.log(num); // 64

十六进制

* 以 **0x** 开头的数字

  1. var num = 0xFFF;
  2. console.log(num); // 4095

浮点数溢出

Javascript 中浮点数运算可能会导致溢出

num.toFixed(length)

* 对溢出的浮点数进行小数位截取操作
* 截取时值会进行四舍五入运算

**_desc_** 截取小数位 _**params**_ { number } num _**params**_ { number } length 保留的小数的位数 _**return**_ { number }

  1. var num1 = 11.1;
  2. var num2 = 13.2;
  3. var sum = num1 + num2;
  4. console.log(sum); // 24.299999999999997
  5. console.log(sum.toFixed(2)); // 24.30

转换为整数,计算后再转换为小数 👍

  1. var num1 = 11.1;
  2. var num2 = 13.2;
  3. var sum1 = num1 + num2;
  4. var sum2 = (num1 * 10 + num2 * 10) / 10;
  5. console.log(sum1); // 24.299999999999997
  6. console.log(sum2); // 24.3

使用第三库计算

math.js、decimal.js等


类型转换

Number(value)

* 不推荐使用。返回值存在多种情况,不可控
* 转换后,不会自动取整

_**params**_ { any } value _**return**_ { number }

转换前 转换后
数字、纯数字字符串 Number
空数组 []、false、null 0
true 1
其他类型 NaN
  1. var num = 100;
  2. var str1 = "99";
  3. var str2 = "99x";
  4. var arr1 = [];
  5. var arr2 = [1, 2, 3];
  6. var bool1 = true;
  7. var bool2 = false;
  8. var obj1 = {};
  9. var obj2 = { name: "zhangsan" };
  10. console.log(Number(num)); // 100
  11. console.log(Number(str1)); // 99
  12. console.log(Number(str2)); // NaN
  13. console.log(Number(arr1)); // 0
  14. console.log(Number(arr2)); // NaN
  15. console.log(Number(bool1)); // 1
  16. console.log(Number(bool2)); // 0
  17. console.log(Number(obj1)); // NaN
  18. console.log(Number(obj2)); // NaN

+value 了解,不常用

* 和 Number() 完全一致

_**params**_ { any } value _**return**_ { number }

  1. var num = 100;
  2. var str1 = "99";
  3. var str2 = "99x";
  4. var arr1 = [];
  5. var arr2 = [1, 2, 3];
  6. var bool1 = true;
  7. var bool2 = false;
  8. var obj1 = {};
  9. var obj2 = { name: "zhangsan" };
  10. console.log(+num); // 100
  11. console.log(+str1); // 99
  12. console.log(+str2); // NaN
  13. console.log(+arr1); // 0
  14. console.log(+arr2); // NaN
  15. console.log(+bool1); // 1
  16. console.log(+bool2); // 0
  17. console.log(+obj1); // NaN
  18. console.log(+obj2); // NaN

parseInt(value)

* 转换后,会自动取整(向下取整)
* 转换以数字开头的字符串时,首个非数字字符及其后方的字符会被截取并忽略

**_desc_** 转换为数字整型 _**params**_ { any } value _**return**_ { number }

转换前 转换后
数字、数字开头的字符串 Number
非空数组 1
其他类型 NaN
  1. var num = 100;
  2. var str1 = "99";
  3. var str2 = "99xx100";
  4. var str3 = "x99";
  5. var arr1 = [];
  6. var arr2 = [1, 2, 3];
  7. var bool1 = true;
  8. var bool2 = false;
  9. var obj1 = {};
  10. var obj2 = { name: "zhangsan" };
  11. console.log(parseInt(num)); // 100
  12. console.log(parseInt(str1)); // 99
  13. console.log(parseInt(str2)); // 99
  14. console.log(parseInt(str3)); // NaN
  15. console.log(parseInt(arr1)); // NaN
  16. console.log(parseInt(arr2)); // 1
  17. console.log(parseInt(bool1)); // NaN
  18. console.log(parseInt(bool2)); // NaN
  19. console.log(parseInt(obj1)); // NaN
  20. console.log(parseInt(obj2)); // NaN

parseFloat(value)

* 转换后,不会自动取整

**_desc_** 转换为数字浮点型 _**params**_ { any } value _**return**_ { number }

转换前 转换后
数字、数字开头的字符串 Number
非空数组 1
其他类型 NaN
  1. var num = 100;
  2. var str1 = "99";
  3. var str2 = "99xx100";
  4. var str3 = "x99";
  5. var arr1 = [];
  6. var arr2 = [1, 2, 3];
  7. var bool1 = true;
  8. var bool2 = false;
  9. var obj1 = {};
  10. var obj2 = { name: "zhangsan" };
  11. console.log(parseFloat(num)); // 100
  12. console.log(parseInt(str1)); // 99
  13. console.log(parseInt(str2)); // 99
  14. console.log(parseInt(str3)); // NaN
  15. console.log(parseInt(arr1)); // NaN
  16. console.log(parseInt(arr2)); // 1
  17. console.log(parseInt(bool1)); // NaN
  18. console.log(parseInt(bool2)); // NaN
  19. console.log(parseInt(obj1)); // NaN
  20. console.log(parseInt(obj2)); // NaN

类型检测

Number.isInteger(value)

**_desc_** 检测是否是整数 _**params**_ { any } value _**return**_ { boolean }

  1. var num1 = 100;
  2. var num2 = 99.99;
  3. var str = "123";
  4. console.log(Number.isInteger(num1)); // true
  5. console.log(Number.isInteger(num2)); // false
  6. console.log(Number.isInteger(str)); // false

Number.isSafeInteger(value) 了解,不常用

* 安全整数:
* 可以准确的表示为一个 IEEE-754 双精度数字
* 其 IEEE-754 表示不能是舍入任何其他整数以适应 IEEE-754 表示的结果

**_desc_** 检测是否是安全整数 _**params**_ { any } value _**return**_ { boolean }


Number.isFinite(value)

**_desc_** 检测是否是有穷数 _**params**_ { any } value _**return**_ { boolean }

  1. var num1 = 100;
  2. var num2 = 100 / 0;
  3. console.log(Number.isFinite(num1)); // true
  4. console.log(Number.isFinite(num2)); // false

Number.isNaN(value)

**_desc_** 检测是否是 NaN _**params**_ { any } value _**return**_ { boolean }

  1. var num1 = 100;
  2. var num2 = NaN;
  3. console.log(Number.isNaN(num1)); // false
  4. console.log(Number.isNaN(num2)); // true