在工作中,我们在写js代码的时候,经常需要把一些代码转换为数字,今天我想要说的是本人对于ECMAscript提供的两种把非数字的原始值转化为数字的两种方法的理解,即parseInt()和parseFloat()。
parseInt()是把值转化为整数,而parseFloat()则是把值转化为浮点数值,这即是两者的区别之一,但是要特别注意的是,***这两个方法只有对string的数据类型才能正确调用,其它的数据类型都会返回NaN(not a number)——不是一个有效数字。***
这两个方法在转化成数字的过程中,都会仔细的分析代码,看位置0的位置是否是一个有效的number类型的数值,如果是,它会继续查找下一位置的的字符,直到不是number类型数值的字符位置,它就会停止继续查找;但是位置0不是number类型的数值,它就会返回一个NaN,但是parseInt()方法会把小数点('.')视为无效数字,如果字符串中有小数点,但小数点的位置它就会立即停止查找,所以它所得到的值是一个整数。
而parseFloat()则反之,它能转化小数点('.'),所以用parseFloat()的方法可以得到浮点数值。
**在这里要特别注意的是,转化的字符串必须要以number类型的数字开头,否则返回值都是NaN**
列如:
var mystring='12.5sting'
console.log(parseInt(mystring))//output12
console.log(parseFloat(mystring))//output12.5
但是如果不是以数字开头的字符,则如下:
var mystring='string12.5sting';
console.log(parseInt(mystring));//output NaN
console.log(parseFloat(mystring));//outputNaN
parseInt()的方法也有基模式,可以把数字转化成二进制、八进制、十进制、十六进制,parseInt()的基是第二个数字指定的
console.log(parseInt('8',10));//output 8
console.log(parseInt('16',8));//output 14
console.log(parseInt('11',2));//output 3
console.log(parseInt('8',16));//output 8
**而特殊的是parseFloat()方法里面的字符串数值必须是10进制表示**
在在面我们也说道一个特殊的NaN,我们会经常用到一个方法来测试一个字符串是不是有效数字——isNaN();如果返回值是false则是有效数字,true则是无效数字,但是一般我们用这个方法检测的时候推荐这么写(即加个!):
console.log(!isNaN("string"));//output false
console.log(!isNaN("123"));//output true
console.log(!isNaN(true));//output true
console.log(!isNaN(false));//output true
特别注意的是true和false也是一个有效的数字,因为它们的返回值是1和0 ;
ps:NaN==NaN为false,null==undefined为true,它们的返回值都是0;
ps:再加入一点小知识,这是我之前一直不理解的,即null和undefined的区别:
undefined表示变量声明但未初始化时的值,
null表示准备用来保存对象,还没有真正保存对象的值。从逻辑角度看,null值表示一个空对象指针。
版权声明:本文为wy5819原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。