# 一.数据分类[Number]

# 1.范围

  • number 包含正数、负数、零、小数、NaN
typeof NaN; //NaN 不是一个数,但是属于 number 数据类型
1

# 2.转换

  • 数字进制
// 八进制第一个数字必须是零(0),然后是相应的八进制数字(数值0~7)
let octalNum1 = 070; // 八进制的54
let octalNum2 = 079; // 无效的八进制值,当成79 处理
let octalNum3 = 08; // 无效的八进制值,当成8 处理

// 十六进制字面量,必须让真正的数值前缀0x(区分大小写),然后是十六进制数字(0~9 以及A~F)
let hexNum1 = 0xa; // 十六进制10
let hexNum2 = 0x1f; // 十六进制31
1
2
3
4
5
6
7
8
  • 严格转换为数字:如果是把一个字符串转换为数字,只有字符串中的每一个字符都是有效数字字符,才可以正常转换,相反只要有一个不是有效数字字符(除了空格符),最后结构就是 NaN

    Number(true); //1
    Number(false); //0
    Number(null); //0
    Number(""); //0
    Number(undefined); //NaN
    Number("12"); //12
    Number("12px"); //NaN
    Number("  1 "); //1
    
    1
    2
    3
    4
    5
    6
    7
    8
  • 非严格转换数字:parseInt/parseFloat 从左到右一次查找,把有效的数字字符转换为数字,但是一旦遇到一个非有效的数字字符,立即停止查找(不管后面是否还有都不再查找了)

    parseInt("12px"); //12
    parseInt("12px13"); //12
    parseInt("px12"); //NaN
    parseInt("12.5px"); //12.5
    parseFloat("12.5px"); //12.5
    
    1
    2
    3
    4
    5
    • 转换为整数:参数 1:要转换的变量,参数 2:以什么进制来转换这个数值,默认 10 进制,0 也是 10 进制

      parseInt("234blue"); // 234
      parseInt("blue234"); // NaN
      parseInt(""); // NaN
      parseInt("44.5"); // 44
      parseInt("070"); // 54(8进制)
      parseInt("0xf"); // 15(14进制)
      parseInt("070", 10); // 后面告诉浏览器这是10进制
      
      1
      2
      3
      4
      5
      6
      7
    • 转换为小数:只解析 10 进制,没有小数点或小数点后面都是 0 会返回整数

      parseFloat("1234blue"); // 1234 整数
      parseFloat("0xA"); // 0
      parseFloat("22.54.5"); // 22.54
      
      1
      2
      3
  • 转换为字符串: 不能转换 null 和 undefined

    (11)
      .toString()(
        // '11' 字符串
        true
      )
      .toString(); // 'true' 字符串
    toString(); // 是对象下的方法,所以不能使用
    
    1
    2
    3
    4
    5
    6
    7

# 3.方法

  • toFixed(n):保留小数点后面 n 位

    var num = 3.1415;
    num.toFixed(2);
    //3.14
    
    1
    2
    3

# 4.判断

# 4.1 整数判断

  • 方法一:模运算
function isInteger(num) {
  return num % 1 === 0;
}
1
2
3
  • 方法二:使用 Math 方法
function isInteger(num) {
  return Math.ceil(num) === Math.floor(num);
}
// function isInteger(num) {
//   return Math.round(num) === num
// }
// function isInteger(num) {
//   return Math.floor(num) === num
// }
// function isInteger(num) {
//   return Math.ceil(num) === num
// }
1
2
3
4
5
6
7
8
9
10
11
12
  • 方法三:Number 方法
function isInteger(num) {
  return Number.isInteger(num);
}
// 原理
// Number.isInteger =
//   Number.isInteger ||
//   function (value) {
//     return (
//       typeof value === "number" &&
//       isFinite(value) &&
//       Math.floor(value) === value
//     )
//   }
1
2
3
4
5
6
7
8
9
10
11
12
13

# 4.2 相等判断

  • 等号的三种情况
= //赋值
== //判断左右两边的值是否相等
===  //判断左右两边的值是否觉得相等(包含数据类型)
1
2
3
  • 数据类型转换规则:
    • 1、如果只有一个值,判断这个值是真还是假,遵循:只有 0、NaN、""、null、undefined 这五个是假的,其余的都是真
    • 3、除了 == 是比较 === 也是比较(绝对比较),
    • val1 === val2 如果数据类型不一样肯定不相等

# 4.3 数字判断

  • isNaN :用来检测是否为有效数字,有效数字返回 false,不是有效数字返回 true

    isNaN(NaN); // true
    isNaN("blue"); // true (不能被转换为数字)
    isNaN(10); // false
    isNaN("10"); // false (10可以被转换成数值10)
    isNaN(true); // false(可以被转换成1)
    
    1
    2
    3
    4
    5

    注意

    • 如果检测的值不是 number 类型的,浏览器会默认先通过 Number 把它强制转换为 number 类型,然后再检测是否为有效数字
    • isNaN 首先会调用对象的 valueOf() 方法,然后再确定返回的值是否可以转换为数值。如果不能,再调用 toString() 方法,并测试其返回值
  • isFinite:检测有限的合法数字

    • 出现小数精度丢失的原因,JavaScript 可以存储的最大数字、最大安全数字,JavaScript 处理大数字的方法、避免精度丢失的方法
    • 除 NaN 与 Infinity 都返回 true
    isFinite(NaN); // false
    isFinite(Infinity); // false
    
    1
    2