### JS 字符串转数字的多种方法
在JavaScript中,将字符串转换为数字是一个常见的操作,尤其是在处理用户输入、解析JSON数据或进行数学计算时,JavaScript提供了多种方法来实现字符串到数字的转换,每种方法都有其适用场景和注意事项,下面将详细介绍几种常用的字符串转数字的方法。
#### 1. 使用全局方法 `parseInt()`
`parseInt()` 函数解析一个字符串,并返回一个整数,该函数会忽略字符串前面的空格,直到找到第一个非空白字符,它会继续解析字符串,直到遇到第一个无法转换为数字的字符为止,如果字符串的第一个字符无法转换为数字,`parseInt()` 会返回 `NaN`。
**基本用法**:
let str = "123"; let num = parseInt(str); // 123 let strWithRadix = "0x10"; // 十六进制 let hexNum = parseInt(strWithRadix, 16); // 16 let strWithSpaces = " 456"; let numWithSpaces = parseInt(strWithSpaces); // 456 let strWithNonNumeric = "456abc"; let numWithNonNumeric = parseInt(strWithNonNumeric); // 456 let strInvalid = "abc"; let numInvalid = parseInt(strInvalid); // NaN
**注意**:
- `parseInt()` 可以接受第二个参数,指定解析时使用的基数(进制),如果不指定,则根据字符串的格式来猜测基数(例如,以 "0x" 开头的字符串被视为十六进制)。
- 如果字符串以非数字字符开头,`parseInt()` 会返回 `NaN`。
- 如果字符串以数字开头但包含无法转换为数字的字符,`parseInt()` 会停止解析并返回已解析的数字部分。
#### 2. 使用全局方法 `parseFloat()`
与 `parseInt()` 类似,`parseFloat()` 函数解析一个字符串,并返回一个浮点数,与 `parseInt()` 不同的是,`parseFloat()` 会继续解析直到字符串的末尾或遇到无法转换为数字的字符为止,包括小数点后的数字。
let strFloat = "123.456"; let numFloat = parseFloat(strFloat); // 123.456 let strFloatWithSpaces = " 789.123"; let numFloatWithSpaces = parseFloat(strFloatWithSpaces); // 789.123 let strFloatInvalid = "123.456abc"; let numFloatInvalid = parseFloat(strFloatInvalid); // 123.456 let strFloatOnlyDot = ".123"; let numFloatOnlyDot = parseFloat(strFloatOnlyDot); // 0.123 let strFloatNoNumber = "abc"; let numFloatNoNumber = parseFloat(strFloatNoNumber); // NaN
- 如果字符串以非数字字符开头(除了可选的正负号),`parseFloat()` 会返回 `NaN`。
- 如果字符串包含小数点但没有数字,`parseFloat()` 会返回 `NaN`,但如果字符串以小数点开头且后面跟着数字,则会正确解析为浮点数(如示例中的 `.123`)。
- 如果字符串包含无法转换为数字的字符,`parseFloat()` 会停止解析并返回已解析的数字部分。
#### 3. 使用一元加号运算符 `+`
一元加号运算符 `+` 可以将字符串转换为数字,如果字符串包含有效的数字表示(包括整数和浮点数),则将其转换为相应的数字值,如果字符串不包含有效的数字表示,则将其转换为 `NaN`。
let str = "123"; let num = +str; // 123 let strFloat = "456.789"; let numFloat = +strFloat; // 456.789 let strInvalid = "abc"; let numInvalid = +strInvalid; // NaN let strEmpty = ""; let numEmpty = +strEmpty; // 0 let strSpaces = " "; let numSpaces = +strSpaces; // 0
- 使用一元加号运算符时,空字符串 `""` 和仅包含空格的字符串会被转换为 `0`,而不是 `NaN`。
- 如果字符串以非数字字符开头,则会被转换为 `NaN`。
#### 4. 使用 `Number()` 构造函数
`Number()` 构造函数也可以用于将字符串转换为数字,它的行为类似于一元加号运算符,但语法上有所不同。
**基本用法