parseInt将字符串转换为整数?
parseInt是JavaScript语言提供的一个用于将字符串转换为整数的函数。它的主要作用是将一个指定基数(进制)下的数字字符串转换成对应的整数。由于JavaScript中的数据类型自动转换具有一定的随意性,因此,在涉及到字符串转换整数时需要格外小心。在本文中,我们将详细讲解这个函数的使用方法和注意点。
一、语法及基本用法
parseInt函数的语法如下所示:
parseInt(string, radix)
其中 个参数string是要被转换为整数的字符串,第二个参数radix是指被转换的数字字符串的进制数(默认是十进制)。例如,如果我们要把一个八进制的数字字符串“010”转换成十进制的整数,可以这样写:
parseInt("010", 8)
这里的第二个参数8表示字符串“010”是一个八进制的数字字符串。执行这个函数后,它将返回十进制数8。如果省略了参数radix,则默认将被转换的数字字符串视为十进制数。
除了字符串解析成整数以外,这个函数还可以处理其他类型(如布尔型和数字型)。例如:
parseInt(true) //NaN
parseInt(false) //NaN
parseInt(1.23) //1
当这个函数在转换非字符串类型时,会首先将这些类型的值转换为字符串,然后再进行解析。
二、特殊注意点
1. 进制标识符
在对数字字符串进行解析时,它必须满足数值的格式,否则将返回NaN(不是数字)。而一个字符串是否满足数值的格式,则需要考虑它所代表的进制。在JavaScript中,可以用0x或0X表示十六进制数,用0表示八进制数,没有前导符号则表示十进制数。
例如:
parseInt("0x16") //22
parseInt("0xG") //0(因为只有0-9,A-F,a-f这些字符才能组成十六进制数)
parseInt("010") //8(因为前导符号0表示八进制)
parseInt("14") //14(默认是十进制)
2. 按位非运算符 ~
在使用按位非运算符~取反时,需要注意它等同于num = -(num + 1)的运算方式。例如:
~10 //-11
~"010" //-11
上述两个表达式的返回值都是-11,这是因为在进行取反运算时函数首先将字符串“010”转换为十进制数10,然后再进行按位取反,其结果是-11。要避免这个问题,可以对结果进行另一次取反运算,使其恢复为原始值:
~~10 //10
~~"010" //10
3. NaN
在对非法字符串进行转换时,parseInt函数会返回NaN。NaN(not a number)是JavaScript中一种特殊的非数字值,它用来表示一个无效或未定义的数值。NaN不等于任何值,包括它自身。
例如:
parseInt("abc") //NaN
parseInt("10abc") //10
上述两个表达式的返回值分别是NaN和10,因为 个参数无法转换为数字,所以返回NaN;第二个参数“10abc”可以解析成数字10,然后忽略掉后面的“abc”。
需要注意的是,不同于其它数字类型的值,NaN不等于任何值(包括NaN本身)。因此,在检测一个返回值是否为NaN时,不能直接使用等于运算符(==)来进行比较。正确的方法是使用isNaN函数。
例如:
isNaN(parseInt("abc")) //true
4. parseInt的局限性
虽然parseInt函数可以将一个字符串解析成整数,但是它有一些局限性,需要特别注意:
(1)对于小数点,parseInt函数只能返回小数点前的整数部分。例如:
parseInt("3.14") //3
(2)parseInt函数默认忽略字符串开头的所有空格,只解析 个非空格字符。例如:
parseInt(" 10 ") //10
parseInt(" abc10 ") //NaN
(3)如果被解析的字符串中包含非数字字符(比如字母、空格、标点符号等),parseInt函数会忽略这些字符并返回 个有效数字之前的所有字符。例如:
parseInt("10a") //10
parseInt("a10") //NaN
因此,在使用parseInt函数时,需要认真检查被解析的字符串是否符合数字的格式,否则可能会导致错误的结果。
三、补充:parseFloat函数
除了parseInt函数,JavaScript中还提供了一个用于将字符串转换成浮点数的函数:parseFloat。和parseInt函数类似,parseFloat函数也接收一个字符串参数并返回对应的浮点数。该函数在解析整数部分时与parseInt函数相似,但它会将小数点后的字符串解析成浮点数。例如:
parseFloat("3.1415") //3.1415
parseFloat(".5") //0.5
需要注意的是,parseFloat函数对于非法字符串返回NaN的规则和parseInt函数相同。因此,在使用这个函数解析数字字符串时,也需要格外小心。
