2022-10-12 08:29:52
JavaScript 中将字符串转换为数字的常用方法包括 parseInt()、parseFloat()、Number() 和一元加号运算符(+),不同方法适用于不同场景,以下为详细指南:
一、常用转换方法parseInt(string, radix)
功能:将字符串转换为整数。
参数:
string:待转换的字符串。
radix:进制(2-36),若未指定则根据前缀推断(ES5 后废弃八进制推断)。
进制推断规则:
以 0x 或 0X 开头 → 十六进制(radix=16)。
以 0 开头且非十六进制 → 十进制(ES5 后废弃八进制推断)。
其他情况 → 十进制(radix=10)。
示例:
parseInt("42"); // 42(十进制)parseInt("0xFF"); // 255(十六进制)parseInt("010", 8); // 8(显式指定八进制)parseInt("42px"); // 42(遇到非数字字符停止解析)parseFloat(string)
功能:将字符串转换为浮点数。
规则:
自动忽略开头空格,解析至非数字字符(如第二个小数点、字母等)。
支持指数符号(e/E)。
示例:
parseFloat("3.14"); // 3.14parseFloat("3.14abc"); // 3.14(遇到字母停止解析)parseFloat("1.2.3"); // 1.2(第二个小数点停止解析)parseFloat("1e3"); // 1000(支持科学计数法)Number("str")
功能:将字符串严格转换为数字。
规则:
要求整个字符串为有效数字格式,否则返回 NaN。
示例:
Number("42"); // 42Number("3.14"); // 3.14Number("42px"); // NaN(包含非数字字符)一元加号运算符(+)
功能:与 Number() 行为一致,但更简洁。
示例:
+"42"; // 42+"3.14"; // 3.14+"42px"; // NaN大数字处理
parseFloat() 可能返回 Infinity 或 -Infinity(如 parseFloat("1e1000"))。
可通过 Math.floor()、Math.ceil() 或 Math.round() 进一步处理浮点数:
Math.floor(parseFloat("3.14")); // 3进制歧义问题
parseInt("010") 在 ES5 前可能返回 8(八进制),ES5 后返回 10(十进制)。
建议:始终显式指定 radix 参数(如 parseInt("010", 10))。
isNaN()
问题:会尝试将参升镇数转换为数字,可能导致误判(如 isNaN("hello") 返回 true,但 isNaN("42") 返回 false)。
示例:
isNaN(parseInt("hello")); // true(转换失败)isNaN("42"); // false(字符串可转换为数字)Number.isNaN()
优势:仅当参数本身为 NaN 时返回 true,避免类型转换干扰。
示尺培例:
Number.isNaN(NaN); // trueNumber.isNaN("hello"); // falseNumber.isNaN(parseInt("hello")); // true通过合理选择方法并处理边界情况,可高效完成字符串到数字的转换任务。