js 字符串转数字

admin 4 0

### 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()` 构造函数也可以用于将字符串转换为数字,它的行为类似于一元加号运算符,但语法上有所不同。

**基本用法