当前位置: 代码迷 >> Web前端 >> 三、类型转换
  详细解决方案

三、类型转换

热度:82   发布时间:2012-10-24 14:15:58.0
3、类型转换

转换成字符串??

toString()

ECMAScript 的 Boolean 值、数字和字符串的原始值都伪对象 这意味着它们实际上可以具有属性和方法 (请参考《JavaScript浮点数运算 ―― 精度问题 》一节数字伪对象应用)。3 种主要的原始类型 Boolean 值、数字和字符串都有 toString() 方法。

var bool = true;    
  
var num = 1.1;    
var str = 'str';    
alert(bool.toString());//true    
alert(num.toString());//1.1    
alert(str.toString());//str  

?

采用 Number 类型的 toString() 方法的基模式,可以用不同的基输出数字,例如二进制的基是 2,八进制的基是 8,十六进制的基是 16。

var iNum1 = 10;   
alert(iNum1.toString(2)); //输出 "1010"   
alert(iNum1.toString(8)); //输出 "12"   
alert(iNum1.toString(16)); //输出 "A"   
  
var iNum2 = 0x123;//十六进制   
alert(iNum2.toString(16)); //输出 "123"   

?

注:Number 类型的不带基于参数的toString() 方法返回的都是数字的十进制表示。因此,无基数时以八进制或十六进制字面量形式声明的数字输出的都是十进制形式的。

转换成数字

parseInt()

var iNum1 = parseInt("12345red"); //返回 12345    
var iNum2 = parseInt("0xA");        //十六进制数,返回 10    
var iNum3 = parseInt("010");        //八进制数,返回 8    
var iNum4 = parseInt("56.9");      //返回 56    
var iNum5 = parseInt("red");      //返回 NaN    
var iNum6 = parseInt("r123ed");  //返回 NaN,只要是以非数字开头,都会返回NaN  

?

带基数参数:

var iNum1 = parseInt("AF", 16); //返回 175,如果不带基数,则返回NaN,所以当没有正确前导时要指定基数    
alert(parseInt("0x10", 16)); //返回 16   
alert(parseInt("10", 16)); //返回 16   
alert(parseInt("0x10")); //返回 16,如果前导符正确时,可以不带基数也可以正确转换  

?

当然,对二进制、八进制甚至十进制(默认模式),都可以这样调用 parseInt() 方法:

var iNum1 = parseInt("10", 2); //返回 2    
var iNum2 = parseInt("10", 8); //返回 8    
var iNum3 = parseInt("10", 10); //返回 10   

?

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

var iNum1 = parseInt("010");               //返回 8,以零开头时表示二进制,即使没有指定基数    
var iNum2 = parseInt("010", 8);            //返回 8    
var iNum3 = parseInt("010", 10);          //返回 10,以零开头 时,如果字符串本身是十进制时,就要带上基数   

?

在这段代码中,两行代码都把字符 "010" 解析成一个数字。第一行代码把这个字符串看作八进制的值,解析它的方式与第二行代码(声明基数为 8)相同。最后一行代码声明基数为 10,所以 iNum3 最后等于 10。

parseFloat()

parseFloat() 方法的另一不同之处在于,字符串必须以十进制形式表示浮点数 ,而不是用八进制或十六进制 该方法会忽略前导 0,所以八进制数 0102 将被解析为 102对于十六进制数 0xA,该方法将返回 NaN,因为在浮点数中,x 不是有效字符 。此外,parseFloat() 方法也没有基模式

var fNum1 = parseFloat("12345red"); //返回 12345    
var fNum2 = parseFloat("0xA"); //返回 NaN,不会看成十六进制,会所零先丢弃,但X却无法转换,所以为NaN    
var fNum3 = parseFloat("11.2"); //返回 11.2    
var fNum4 = parseFloat("11.22.33"); //返回 11.22    
var fNum5 = parseFloat("0102"); //返回 102,这里不会把它看成八进制,转换前会自动去掉    
var fNum1 = parseFloat("red"); //返回 NaN   

?

强制类型转换

ECMAScript 中可用的 3 种强制类型转换如下:

? Boolean(value) - 把给定的值转换成 Boolean 型;

? Number(value) - 把给定的值转换成数字(可以是整数或浮点数);
? String(value) - 把给定 的值转换成字符串;

Boolean()

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

Number()

Number() 函数的强制类型转换与 parseInt() 和 parseFloat() 方法的处理方式相似,只是它转换的是整个值 ,而 不是部分值 如果字符串值能被完整地转换,Number() 将判断是调用 parseInt() 方法还是 parseFloat() 方法

Number(false)  //0    
Number("")    //0    
Number(true)  //1    
Number(null)   //0    
Number("1.2")   //1.2    
Number("12")    //12    
Number("1.2.3")  //NaN    
Number(new Object())//NaN    
Number(undefined)    //NaN   

?

String()

可把任何值转换成字符串。强制转换成字符串和调用 toString() 方法的唯一不同之处在于,对 null 和 undefined 值强制类型转换可以生成字符串而不引发错误

var s1 = String(null); //"null"    
var oNull = null;    
var s2 = oNull.toString(); //会引发错误

??

  相关解决方案