利用JS把字符串转换为数字的三种方法

本文介绍了JavaScript中的三种类型转换方法:转换函数(parseInt()和parseFloat())、强制类型转换(Boolean(value)、Number(value)、String(value))及利用JS变量弱类型特性进行转换。通过实例详细解释了每种方法的应用场景及注意事项。

方法主要有三种:
转换函数、强制类型转换、利用js变量弱类型转换。

1.转换函数:

js提供了parseInt()parseFloat()两个转换函数。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,这两个函数才能正确运行;对其他类型返回的都是NaN(Not a Number)。
一些示例如下:

parseInt("1234blue");   //returns   1234  
parseInt("0xA");   //returns   10  
parseInt("22.5");   //returns   22  
parseInt("blue");   //returns   NaN  

parseInt()方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。基是由parseInt()方法的第二个参数指定的,示例如下:

parseInt("AF", 16);   //returns   175  
parseInt("10", 2);   //returns   2  
parseInt("10", 8);   //returns   8  
parseInt("10", 10);   //returns   10  

如果十进制数包含前导0,那么最好采用基数10,这样才不会意外地得到八进制的值。例如:

parseInt("010");   //returns   8  
parseInt("010", 8);   //returns   8  
parseInt("010", 10);   //returns   10  

parseFloat()方法与parseInt()方法的处理方式相似。
使用parseFloat()方法的另一不同之处在于,字符串必须以十进制形式表示浮点数,parseFloat()没有基模式。
下面是使用parseFloat()方法的示例:

parseFloat("1234blue");   //returns   1234.0  
parseFloat("0xA");   //returns   NaN  
parseFloat("22.5");   //returns   22.5  
parseFloat("22.34.5");   //returns   22.34  
parseFloat("0908");   //returns   908  
parseFloat("blue");   //returns   NaN  

2.强制类型转换

还可使用强制类型转换(type casting)处理转换值的类型。使用强制类型转换可以访问特定的值,即使它是另一种类型的。
ECMAScript中可用的3种强制类型转换如下:
Boolean(value)——把给定的值转换成Boolean型;
Number(value)——把给定的值转换成数字(可以是整数或浮点数);
String(value)——把给定的值转换成字符串。
用这三个函数之一转换值,将创建一个新值,存放由原始值直接转换成的值。这会造成意想不到的后果。

当要转换的值是至少有一个字符的字符串、非0数字或对象(下一节将讨论这一点)时,Boolean()函数将返回true。如果该值是空字符串、数字0、undefined或null,它将返回false。

可以用下面的代码段测试Boolean型的强制类型转换。

Boolean("");   //false   –   empty   string  
Boolean("hi");   //true   –   non-empty   string  
Boolean(100);   //true   –   non-zero   number  
Boolean(null);   //false   -   null  
Boolean(0);   //false   -   zero  
Boolean(new Object());   //true   –   object  

Number()的强制类型转换与parseInt()parseFloat()方法的处理方式相似,只是它转换的是整个值,而不是部分值。示例如下:

用  法                   结  果  
Number(false)                  0  
Number(true)                   1  
Number(undefined)              NaN  
Number(null)                   0  
Number( "5.5 ")                5.5  
Number( "56 ")                 56  
Number( "5.6.7 ")              NaN  
Number(new   Object())         NaN  
Number(100)                    100  

最后一种强制类型转换方法String()是最简单的,示例如下:

var s1 = String(null);   //"null"  
var oNull = null;  
var s2 = oNull.toString();   //won't work, causes an error  

3.利用js变量弱类型转换

举个小例子,一看,就会明白了。

<script>  
var str= '012.345 ';  
var x = str-0;  
x = x*1;  
</script>  

4.使用一些符号也能做类型转换

    X + '' // 等价于 String(X)
    +X    //  等价于 Number(X),也可以写成 x-0
    !!X   // 等价于 Boolean(X)
<think>好的,用户想知道在JavaScript中将字符串转换数字方法。我需要根据提供的引用资料来整理答案。首先,系统级指令要求行内数学表达式用$...$,但这里可能用不上。不过用户的问题是关于JavaScript的,所以主要参考引用[1]、[2]、[3]、[4]。 根据引用[1],提到了使用Number()函数和typeof检查类型。引用[2]和[3]详细列举了七种方法,包括parseInt、parseFloat、Number()、一元加运算符等。引用[4]可能涉及布尔转换,但用户主要关注字符串数字,所以可能不需要这部分。 我需要先列出所有方法,并给出示例。例如,parseInt和parseFloat的区别,如何处理数字字符,Number()的严格转换,以及一元加运算符的简便用法。还要提到Math.floor和乘以1的方法,虽然这些可能不如前面的方法常用,但用户可能想知道。 同时,需要注意每种方法的注意事项,比如parseInt在遇到非数字字符时的处理,Number()对非纯数字字符串返回NaN的情况。还要比较不同方法的适用场景,比如需要整数还是浮点数,是否需要容错处理等。 可能用户还需要知道如何检查转换后的结果是否为有效数字,可以用isNaN或Number.isNaN来验证。例如,转换后的值是否为NaN,需要处理这种情况以避免错误。 另外,引用中的例子显示,比如parseInt('25 is my age', 10)返回25,而parseInt('My age is 25', 10)返回NaN,这说明parseInt会忽略字符串中的非数字后缀,但无法处理前缀非数字的情况。需要指出这点。 最后,生成相关问题,可能涉及方法比较、最佳实践、错误处理等。例如,哪种方法最适合转换带小数的字符串,或者如何处理用户输入中的千位分隔符等。</think>在JavaScript中,字符串转换数字有以下7种常用方法,具体使用场景和注意事项如下: ### 一、核心转换方法 1. **`parseInt()`方法** 解析字符串并返回整数,允许空格且仅返回第一个有效数字: ```javascript parseInt('123px', 10); // 123(自动忽略非数字后缀) parseInt('3.14', 10); // 3(直接截断小数) parseInt('A12', 10); // NaN(前缀非数字返回无效)[^3] ``` 2. **`parseFloat()`方法** 保留小数部分,适用于浮点数转换: ```javascript parseFloat('3.14.15'); // 3.14(仅解析第一个小数点) parseFloat('0xFF'); // 0(不识别十六进制) ``` 3. **`Number()`构造函数** 严格转换数字字符串,非纯数字内容直接返回`NaN`: ```javascript Number(' 123 '); // 123(自动去除首尾空格) Number('12-34'); // NaN(包含非数字字符)[^2] ``` 4. **一元加运算符`+`** 简洁高效,行为与`Number()`完全一致: ```javascript +'99'; // 99 +'99.99%'; // NaN(含非数字符号)[^1] ``` ### 二、特殊场景方法 5. **`Math.floor()`组合** 强制向下取整,但需注意隐式转换规则: ```javascript Math.floor('9.99'); // 9 Math.floor('9px'); // NaN(需先保证是有效数字) ``` 6. **`* 1`隐式转换** 利用JavaScript弱类型特性实现快速转换: ```javascript '88' * 1; // 88 '88kg' * 1; // NaN ``` 7. **位运算符`~~`** 快速取整但仅适用于32位整数: ```javascript ~~'3.14'; // 3 ~~'2147483648'; // -2147483648(溢出问题) ``` ### 三、验证与错误处理 - **有效性验证** 使用`isNaN()`或`Number.isNaN()`检测结果: ```javascript isNaN(parseInt('A1')); // true Number.isNaN(+'12a'); // true ``` - **类型检查** 转换后建议用`typeof`验证类型: ```javascript let num = +'123'; console.log(typeof num === 'number'); // true[^1] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值