数字 Number

| parseInt()

parseInt(string,radix) => 解析字符串,返回整数

string : 必选,被解析字符串
radix: 可选,要解析的数字的基数(2-36;把各进制字符串转换成整数)

  • 会自动忽略str前空格,找到第一个非空字符。
    parseInt(" 12.11") => 12
    parseInt(" 1 2.11") => 1

  • 若第一个字符不是数字,则返回NaN。
    parseInt("abc") => NaN
    parseInt("") => NaN
    parseInt() => NaN

  • 若第一个字符为数字,则继续解析第二个字符,直至解析完或解析至非数字字符。
    parseInt("1abc") => 1

  • 若第二个参数为0、undefined、null,则直接忽略。
    parseInt(11,null) => 11
    parseInt(11,undefined) => 11
    parseInt(11,0) => 11

  • 若第二个参数<2 或者>36,则返回 NaN。
    parseInt('10', 37) => NaN
    parseInt('10', 1) => NaN

  • 如果string包含对于指定进制(radix)无意义的字符,则返回NaN。
    parseInt('1', 2) => 1
    parseInt('2', 2) => NaN
    parseInt('023', 2) => 0

  • 当radix为0或未设置,根据string判断数字基数。
    1. 以1 ~ 9的数字开头,解析为十进制的整数;
    2. 以”0x”开头,把其余部分解析为十六进制整数;
      parseInt("0x11") => 17
    3. 以0开头,把其后的字符解析为八进制或十六进制的数字;
      parseInt(011) => 9

      注意: parseInt("011") => 11

数字限制

  1. 当小数点后0的个数>5:
    parseInt(0.000001) => 0
    parseInt(0.0000001) => 1 (1e-7)
    parseInt('0.0000001') => 0

  2. 当小数点前数字位数大于21:
    parseInt(100000000000000000000) => 100000000000000000000
    parseInt(1000000000000000000000) => 1
    parseInt('1000000000000000000000') => 1e+21

注意:1中小数点后计算0的个数;2中计算小数点前的位数,可为任意数;

实例

["1", "2", "3"].map(parseInt)输出什么?

解析:
["1", "2", "3"].map(parseInt)等同于调用了三次parseInt方法:

["1","2","3"].map(function(ele,index){
  return parseInt(ele,index)
})

parseInt(“1”,0) => 基数为0时,按照上边陈述即为10进制,返回 1
parseInt(“2”,1) => 基数为1,不在2-36范围内,默认输出NaN
parseInt(“3”,2) => 基数为2,因为字符串3大于基数不合法,解析为NaN
答案:[1, NaN, NaN]

| parseFloat()

parseFloat() => 解析字符串,返回浮点数

  • 一个参数
  • 解析以数字开头的字符串(非数字部分省略)
  • 第一个字符非数字,则返回NaN
  • 可以将字符串转换成浮点数,第二个小数点后无效
  • 字符前0省略

    parseFloat('12ab') => 12
    parseFloat('a123') => NaN
    parseFloat('00123') => 123
    parseFloat('0') => 0
    parseFloat('123.213') => 123.213
    parseFloat('123.213.213') => 123.213
    parseFloat("3.125e7") => 31250000
    parseFloat('') => NaN
    parseFloat('0x11') => 0
    parseFloat('011') => 11
    parseFloat(011) => 9

注意:

  1. parseInt()parseFloat() 函数会尝试逐个解析字符串中的字符,直到遇上一个无法被解析成数字的字符,然后返回该字符前所有数字字符组成的数字。如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。
  2. 使用运算符"+"将字符串转换成数字,只要字符串中含有无法被解析成数字的字符,该字符串都将被转换成 NaN。
    +123abc => NaN
    parseInt('123abc') => 123
    parseInt('123abc') => 123
    parseInt('abc') => NaN
    parseInt('abc') => NaN

| Number()

用于任何数据类型转换成数值。

  • 若为Boolean值,true和false将分别转换为1和0。
    parseInt(true) => 1
    parseInt(false) => 0

  • 若为null值,返回0。
    parseInt(null) => 0

  • 若为undefined,返回NaN。
    parseInt(undefined) => NaN

  • 若字符串为空,则将其转换为0。
    Number("") => 0

  • 若首位字符为非数字,则返回NaN。
    parseInt("abc") => NaN

  • 如果字符串中包含浮点格式,如”1.1”,则将其转换为对应的浮点数值。
    parseInt("11.11") => 11.11

  • 如果字符串中包含有效的十六进制、八进制格式,则将其他转换为相同大小的十进制整数值。
    Number('0xf') => 15
    Number(011) => 9
    Number('011') => 11

| 其他

获取指定范围内的随机整数

function getRadomNum(min,max){
  return  Math.floor(Math.random() * (max - min + 1)) + min;
}

参考:几个js开发过程中的小技巧

优雅的表示大数字
// All the below will evaluate to true
1e0 === 1;
1e1 === 10;
1e2 === 100;
1e3 === 1000;
1e4 === 10000;
1e5 === 100000;

Longhand:const obj = { x:x, y:y };
Shorthand:const obj = { x, y };

~~ 和 |0

Longhand: Math.floor(4.9) === 4 //true; //parseInt
Shorthand: ~~4.9 === 4 //true
var foo = (12 / 4.13) | 0; //结果为2

千分位

Vue.prototype.$thousandsNum = function(num){
    return num.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,');
}