JavaScript类型转换
1.ECMAScript提供Boolean()方法,将一个值转换成布尔值。虽然很多时候我们并不需要这么去做,但是我们需要记住JavaScript中各个类型对应所对应的布尔值。布尔值在程序中做判断时很重要,我们不能忽视它。
2.当然在JavaScript中类型转换发生的最频繁的是数值型与字之间符串,而转换的方式又有两种,显示转换和隐式转换。
隐式转换:
字符串-》数字:可以使用操作符 - + * /,如下例子:
var a = "123";
var b = "456";
var c = "789";
a = +a; //如果不是数值型字符串,则输出NaN
b = b*1
c = c / 1;
console.log(a); //123
console.log(b); //456
console.log(c); //789
数字-》字符串:使用+操作符,如下例子:
var a = 123;
a = 123 + "";
console.log(a) //"123";
显示转换
字符串转换成数值型的方法有:Number()、parseInt()、parseFloat(),其中Number()方法可以把任何类型的数据转换成数值类型,而parseInt()和parseFloat()主要针对字符串类型。
Number()类型转换规则:
如果是数字值,则简单的传入和返回
如果是布尔型,则true和false分别被转换为1和0;
如果是null,则返回的是0
如果是undefined,则返回的是NaN
期望
如果是字符串则遵循以下规则:
如果是数值型字符串(包括前面带正号和负号的情况)。则将其转换为十进制的数值,注意会忽略前导0。
如果字符串符合有效的浮点型格式,则将其转换为对应的浮点型数值。(注意前导0同样会被忽略)。
如果是空字符串,则会被转换成0;
如果字符串里包含有效的十六进制格式,如"0xf",则字符串会被转换成相同大小的十六进制数。
如果字符串不符合以上格式,则会返回NaN。
parseInt()方法
由于Number()转换字符串时比较复杂且不够合理,因此在处理整数的时候通常用parseInt()。
parseInt()转换过程:忽略字符串前面的空格-》直到找到第一个非空格字符-》做判断,如果不是数字字符或者是负号,则返回NaN;如果第一个字符是数字字符,则解析第二个字符,直到解析完后续所有字符或者遇到非数字字符。
仔细观察parseInt()方法的解析过程,不难发现如果是空字符串则会返回NaN,解析的时候碰到小数.时也会则会停止解析,因为小数点并不是有效的数字字符。
当然parseInt能够识别出各种整数格式。现在的ECMAScript 5 JavaScript引擎中,parseInt已经不具有解析八进制的能力,因此前导0会被认为无效。为了消除在使用parseInt()函数可能导致的这种困惑,可以给函数提供第二个参数,即转换时的基数(多少进制)。如下实例:
console.log(parseInt("AF",16)) ->175
console.log(parseInt("AF")) -> NaN
如果不传递第二个参数,意味着由parseInt()自行决定怎么解析字符串,为避免不必要的解析错误,建议无论在什么时候都给parseInt传递基数。
parseFloat()方法:
parseFloat()是将字符串转换成浮点型格式,需要注意的是parseFloat()也会忽略前导0,解析过程与parseInt()相似。第一个小数点是有效的,第二个小数点是无效,因为它会当做字符来解析。