经常用 JavaScript 写代码的人,肯定都用过 parseInt()
来把字符串形式的整数转换成真正的数字类型,方便进行计算。
MDN 对 parseInt()
的定义如下:
parseInt(string)
parseInt(string, radix)
string
是要解析的值。如果它不是 string
类型,解析之前会先被内部转换成 string
。
radix
是一个介于 2 到 36 之间的值,表示 string
参数的进制基数。如果省略这个参数,它不会默认是 10 进制。比如,以 “0x” 开头的字符串会默认是 16 进制(十六进制)。如果你想了解更多关于不同输入的处理方式,可以参考 MDN 关于 parseInt() 的文章。
parseInt()
如果你理解了 radix
参数的作用,parseInt()
可以用来在不同进制之间转换数字。
比如:
parseInt("23", 4)
parseInt("0x23")
parseInt("23", 2)
输出结果会是:
11
35
NaN
这里我们其实是在回答一个问题:“23 在 4 进制下的 10 进制值是多少?在 16 进制下呢?在 2 进制下呢?”
- 4 进制的 “23” 是
2 * 4 + 3
,也就是 10 进制的11
。 - “0x23” 表示 16 进制。
2 * 16 + 3
,也就是 10 进制的35
。 - 2 进制的 “23” 是
NaN
,因为 2 进制的数字只能包含0
和1
。
想象一下,如果有人需要你快速解析二进制数 “1110010”,这会有多方便!
parseInt("1110010", 2)
这会给出正确的 10 进制数:
114
toString(radix)
使用 toString(radix)
时,它会覆盖 Object
对象的 toString()
方法。当用于数字对象时,toString(radix)
会返回该数字对象在指定进制下的字符串表示。
toString(radix)
回答的问题是:“我如何用 4 进制表示 23?用 16 进制呢?用 2 进制呢?”
let num = 23
num.toString(4)
num.toString(16)
num.toString(2)
输出结果会是:
113
17
10111
实际上,parseInt()
和 toString()
就像是一对互逆的操作:
let num = 23
parseInt(num.toString(4), 4)
parseInt(num.toString(16), 16)
parseInt(num.toString(2), 2)
结果会是:
23
23
23
如果你需要生成一个数字的二进制表示,toString(2)
特别有用。或者,如何将一个 16 进制数(基数为 16)转换成它的二进制等价形式呢?
parseInt("1F4", 16).toString(2)
"111110100"
(如果你好奇的话,这其实是 10 进制的 500!)
希望通过这段简短的探索,你能更深入地理解这两个方法。它们不仅仅是把整数转换成字符串,或者反过来。它们还可以用来在不同进制之间转换数字!
祝你编码愉快!