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()相似。第一个小数点是有效的,第二个小数点是无效,因为它会当做字符来解析。

 
备注:十六进制格式的字符串会始终都会被转换成0,因为parseFloat只能转换十进制格式的字符串。
 
备注:如果字符串是可解析为整数的数,则parseFloat()会返回整数。
 
如下例子:
 
var  num1 = parseFloat("12234cqs")   //整数
 
var  num2 = parseFloat("0xA")       // 0
 
var  num3 = parseFloat("22.5")      // 22.5
 
var  num4 = parseFloat("22.11.45")     //22.11
 
var  num5 = parseFloat("0908.12")      // 908.12
 
var  num6 = parseFloat("3.12e7")   //  31200000


其他类型转换成字符串类型的方法有:toString()和String()
 
数值型、布尔型、对象和字符串值都有toString()方法。但null和undefined是么没有的。
posted @ 2017-03-25 16:28  北落师门丨  阅读(165)  评论(0编辑  收藏  举报