今天继续,JS的数值转换。这里面的坑啊, 真是太多了。
JS有三个函数可以把非数值转为数值:
Number();
parseInt();
parseFloat();
Number()可以用于任何数据类型。换言之,什么都可以往里面放。但是,能转成什么东西就不一定了,来看看规则,巨多:
Boolead,true和false分别转成1和0;
数字,就转成数字了;
null,返回0;
undefined,返回NaN;
字符串:
-字符串就是数字的,那就转为数字。但最左边的0会没有。
-字符串包含十六进制的,转为相同大小的十进制;
-字符串是空的,转为0;
-字符串是上述之外的字符,转为NaN。
-是对象的,就调用对象的valueOf()方法,然后再把根据转完的字符串,返回相应用值。如果是NaN,就调用对象的toString()方法,再按之前的规则转。
--够乱的啊。。
接下来是parseInt(),主要用来处理整数的。它忽略字符串左边的空格。如果第一个字符不是数字或负号,它返回NaN;
就是说,parseInt()转换空字符串,返回NaN。人家Number()处理空字符串返回的是0,,,
parseInt()转换字符串时,只要遇到一个非数字,就不再继续往下走了,例如:
console.log( parseInt("123abc44") )
//123
parseInt()也能转十六和八进制的数,但它在解析八进制数值时,有分歧。。(第31页),,
所以要给它加上第二个参数,即转换时用的进制基数。这也是JS的坑啊。不知道这些东西,用JQ习惯了,再用原生JS很难写的圆满。
parseFloat就比较好了,这货只解析十进制,其它不认。
JS的数值转换这块,我得好好再复习复习,,面试题的坑这里有许多。