Skip to content

二.进制转化 ​

本节目标:理解“二.进制转化”的核心思路,并能把它用于实际开发或面试表达。

parseInt
parseInt(string, radix)

解析一个字符串并返回指定基数的十进制整数, radix 是2-36之间的整数,表示被解析字符串的基数。 把string当成radix进制的数字,返回一个十进制数;

参数string 要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用

ToString

抽象操作)。字符串开头的空白符将会被忽略。

radix 可选 从 2 到 36,表示字符串的基数。例如指定 16 表示被解析值是十六进制数。请注意,10不是默认值!

特殊参数处理: 首先是radix参数:

  • 如果第二个参数未传当成16进制来处理;
  • 如果第二个参数是0,false,'',undefined,null,NaN这几个falsy值,则视为未传参数来进行处理;
  • 第二个参数不是整数,则调用parseInt来进行转换,如果转换失败,当作为未传radix来处理。
  • 如果radix为2-36数字时,则视string为0来处理;
  • 如果是2-36以外的数字时,包括负数,返回NaN;

string参数,如果是:

  • 0x开头的,
    • 如果第二个参数未传当成16进制来处理;
    • 如果第二个参数是0,false,'',undefined,null,NaN这几个falsy值,则视为未传参数来进行处理;
    • 第二个参数不是整数,则调用parseInt来进行转换,如果转换失败,当作为未传radix来处理。
    • 如果radix为2-36数字时,则视string为0来处理;
    • 如果是2-36以外的数字时,包括负数,返回NaN;
  • 以0开头,
    • 当成十进制处理;

返回值 从给定的字符串中解析出的一个整数。 或者

 NaN

,当

  • radix 小于 2 或大于 36 ,或
  • 第一个非空格字符不能转换为数字。

parseInt('123', 5) // 将'123'看作5进制数,返回十进制数38 =\> 1*5^2 + 2*5^1 + 3*5^0 = 38

描述parseInt函数将其第一个参数转换为一个字符串,对该字符串进行解析,然后返回一个十进制整数或 NaN。 如果不是NaN,返回值将是以第一个参数作为指定基数 radix 的转换后的十进制整数。(例如,radix为10,就是可以转换十进制数,为8可以转换八进制数"07",16可以转换十六进制数"0xff",以此类推)。 对于 radix 为10以上的,英文字母表示大于9的数字。例如,对于十六进制数(基数16),则使用 A 到 F 。 如果 parseInt 遇到的字符不是指定 radix 参数中的数字,它将忽略该字符以及所有后续字符,并返回到该点为止已解析的整数值。 parseInt 将数字截断为整数值。 允许前导和尾随空格。 由于某些数字在其字符串表示形式中使用e字符(例如 6.022×23 表示 6.022e23 ),因此当对非常大或非常小的数字使用数字时,使用 parseInt 截断数字将产生意外结果。 parseInt不应替代

Math.floor()

。

parseInt 可以理解两个符号。+ 表示正数,- 表示负数(从ECMAScript 1开始)。它是在去掉空格后作为解析的初始步骤进行的。如果没有找到符号,算法将进入下一步;否则,它将删除符号,并对字符串的其余部分进行数字解析。 如果 radix 是 undefined、0或未指定的,JavaScript会假定以下情况:

  1. 如果输入的 string以 "0x"或 "0x"(一个0,后面是小写或大写的X)开头,那么radix被假定为16,字符串的其余部分被当做十六进制数去解析。
  2. 如果输入的 string以 "0"(0)开头, radix被假定为8(八进制)或10(十进制)。具体选择哪一个radix取决于实现。ECMAScript 5 澄清了应该使用 10 (十进制),但不是所有的浏览器都支持。因此,在使用 parseInt 时,一定要指定一个 radix。
  3. 如果输入的 string 以任何其他值开头, radix 是 10 (十进制)。

如果第一个字符不能转换为数字,parseInt会返回 NaN。 为了算术的目的,NaN 值不能作为任何 radix 的数字。你可以调用

isNaN

函数来确定parseInt的结果是否为 NaN。如果将NaN传递给算术运算,则运算结果也将是 NaN。 要将一个数字转换为特定的 radix 中的字符串字段,请使用 thatNumber.toString(radix)函数。

BigInt

。警告: parseInt将

 BigInt

转换为

Number

,并在这个过程中失去了精度。这是因为拖尾的非数字值,包括 "n",会被丢弃。 > 来自

 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt>

//把任意进制转成十进制

console.log(parseInt('20',10));//20
console.log(parseInt('11',2));//3
console.log(parseInt('20',16));//32

//把十进制转成任意进制

console.log((3).toString(2));//11
console.log(3..toString(2));//11
console.log((77).toString(8));//115
console.log((77).toString(16));//4d
console.log((17).toString(8));//21

本站总访问 — 次