JavaScript - 数值类型的判断与常用转换方式


主要参考:


数值类型的判断方法isNaN()和Number.isNaN()

  • 可接受任意参数,用来判断其参数是否为NaN(not a number)

  • 由于把NaN与任何值(包括其自身)相比得到的结果都是false,因此无法通过=====运算符来判断某个值是否为NaN,isNaN()函数也就是必需的

  • isNaN()与Number.isNaN()

    • 直观的说,isNaN()是用来判断参数值是否为NaN,而Number.isNaN()是用来判断参数值是否为Number.NaN(即还需要判断类型为Number);

    • 因此,isNaN()会将参数值强制转换(通过Number()为Number后再判断是否为NaN,而Number.isNaN()仅判断当前参数值是否为NaN。

    • 综上,可有如下表示:

      isNaN(x)等价于Number.isNaN(Number(x))

Number()

参数可为任何类型数据,具体转换规则可大致划分如下:

  • 数字值,只是简单的传入和返回(前导零存在时无论多少都将视为八进制数);

    Number(123); // 123
    Number(0123); // 83
    Number(00123); // 83
    Number(0x123); // 291
  • Boolean值,true和false将分别被转换为1和0;

    Number(true); // 1
    Number(false); // 0
  • null值,返回为0;

    Number(null); // 0
  • undefined值,返回为NaN;

    Number(undefined); // NaN
  • 字符串,又主要区分以下情况:

    • 字符串中只包含数字(可带正/负号),则(忽略前导零后)转换为十进制数值;

      Number('123'); // 123
      Number('+123'); // 123
      Number('-123'); // -123
      Number('0123'); // 123
    • 字符串中包含有效浮点格式,则(忽略前导零后)将其转换为对应浮点数值;

      Number('1.23'); // 1.23
      Number('01.23'); // 1.23
      Number('0.1.23'); // NaN
    • 字符串中包含有效十六进制格式,则将其转换为十进制数值;

      Number('FFF'); // NaN
      Number('0xFFF'); // 4095
    • 字符串为空(可包含多个空格符),都将转换为0;

      Number(''); // 0
      Number('  '); // 0
    • 字符串中包含除上述字符外的其他字符时,将返回NaN

  • 对象,将先调用对象的valueOf()方法后再尝试转换其返回值,如结果仍为NaN,会继续调用对象toString()方法并转换其返回值

parseInt()

parseInt()是较于Number()更为通用合理的解决方案

  • 语法

    parseInt(string[, radix])

    • string:将被解析的目标(被转换后的)字符串参数;

    • radix:(建议明确)标记参数string的数值转换基数。当该参数未使用,或值为undefined、0时,将遵循以下自动判断规则:

      • 当字符串已“0x”/“0X”或“0”开头时将自动识别为十六进制或八进制(ECMAScript5中不支持识别为八进制,但各浏览器支持程度不一致);

        parseInt("0xFF"); // 255
        parseInt("0123"); // 10
      • 当字符串起始位为其他值时,默认设定为10(十进制)

  • 基本规则

    • 前导/后置空格都将被忽略:

      parseInt(" 123 "); // 123
    • 识别参数至第一个非数字字符(包括小数点、正/负号等),仅截取前面数字部分,后续字符将被忽略:

      parseInt("123ab"); // 123
      parseInt("1+2"); // 1
    • 当首字符不是数字字符或正/负号时,直接返回NaN:

      parseInt("a123"); // NaN
      parseInt("-123"); // -123

parseFloat()

parseFloat()相较于parseInt()扩展了浮点数的解析能力

  • 语法

    parseFloat(value)

    • value:唯一参数,即说明只可解析十进制参数,不可指定基数
  • 扩展规则

    • 区别于parseInt()解析到的第一个小数点有效

      parseFloat("0.123"); // 0.123
      parseFloat("0.1.23"); // 0.1
    • 能够识别适用于科学记数法的e/E操作符:

      parseFloat("3.14e-2"); // 0.0314
      parseFloat("0.314E+2"); // 3.14
    • 无法识别非十进制数字字符:

      parseFloat("FF"); // NaN
      parseFloat("0xFF"); // 0
    • 解析转换结果为整数时,将会直接返回整数:

      parseFloat("5.00"); // 5

猜你喜欢

转载自www.cnblogs.com/JustBeZero/p/9639664.html