JavaScript系列:ECMAScript类型转换

1、转换成字符串

  ECMAScript的Boolean值、数字和字符串的原始值均为伪对象,即它们都具有属性和方法。

var color = 'blue';
alert(color.length); // output "4"

  3种主要的原始值Boolean值、数字和字符串都有toString()方法,可以把它们的值转换成字符串。

  Boolean型的toString()方法只是输出"true"和"false",结果由变量的值决定。

var b = false;
alert(b.toString()); // output "false"

  Number类型的toString()方法比较特殊,它有两种模式,即默认模式和基模式。采用默认模式,toSting()方法只是用相应的字符串输出数字值。在默认模式中,无论最初采用什么表示方法声明数字,Number类型的toString()方法返回的都是十进制表示。

  采用Number类型的toString()方法的基模式,可以用不同的基输出数字。基只是要转换成的基数的另一种叫法,它是toString()方法的参数。

var i = 10;
alert(i.toString(2)); // output "1010"
alert(i.toString(8)); // output "12"
alert(i.toString(16)) // output "A"

2、转换成数字

  ECMAScript提供了两种非数字的原始值转换成数字的方法,即parseInt()和parseFloat()。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这两个方法才能正确运行,对于其他类型返回的都是NaN。

  在判断字符串是否为数字值前,parseInt()和parseFloat()都会仔细分析该字符串。parseInt()方法首先看位置0出的字符,判断它是否是个有效数字;如果不是,该方法返回NaN,不在继续执行其他操作。但如果该字符是有效数字,该方法将查看位置1处的字符,进行同样的测试。这一过程将持续到发现非有效数字为止,此时parseInt()将把该字符之前的字符串转换成数字。例如,把字符串"1234abcd"转换成整数,那么parseInt()将返回1234,当它检测到字符'a'时,就会停止检测过程。字符串中包含数字字面量被正确转换为数字,因此字符串"0xA"会被正确转换为数字10。不过,字符串"22.5"将被转换成22。

var iNum1 = parseInt('1234abcd'); // returns 1234
var iNum2 = parseInt('0xA'); // returns 10
var iNum3 = parseInt('22.5'); // returns 22
var iNum4 = parseInt('blue'); // returns NaN

  parseInt()方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。基是由parseInt()方法的第二个参数指定的。

var iNum1 = parseInt('AF', 2); //returns 175
var iNum2 = parseInt('10', 2); //returns 2
var iNum3 = parseInt('10', 8); //returns 8
var iNum4 = parseInt('10', 10); //returns 10

  parseFloat()方法与parseInt()方法处理方式相似,从位置0开始查看每个字符,直到找到第一个非有效的字符为止,然后把该字符前的字符串转换成数字。不过对于这个方法来说,第一个出现的小数点是有效字符,如果有两个小数点,第二个小数点将被看作无效,parseFloat()方法将把第二个小数点前的字符串转换成数字。例如,字符串'12.34.5'将被转换成12.34。

  parseFloat()方法的字符串必须以十进制形式表示浮点数,而不能使用八进制或十六进制。该方法会忽略前导0,例如八进制数0908将被解析为908.对于十六进制数0xA,该方法将返回NaN,在浮点数中,x不是有效字符。

  parseFloat()没有基模式。

var fNum1 = parseFloat('1234abcd'); // returns 1234.0
var fNum2 = parseFloat('0xA'); // returns NaN
var fNum3 = parseFloat('22.5'); // 22.5
var fNum4 = parseFloat('12.34.5'); // returns 12.34
var fNum5 = parseFloat('0908'); // returns 908
var fNum6 = parseFloat('abcd'); // returns NaN

  3、强制类型转换

  使用强制类型转换(type casting)处理转换值的类型,ECMAScript中可用的3种强制类型转换如下:

  ◊ Boolean(value) —— 把给定的值转换成Boolean型

  ◊ Number(value) —— 把给定的值转换成数字(可以是整数或浮点数)

  ◊ String(value) —— 把给定的值转换成字符串

  Number()的强制类型转换与parseInt()和parseFloat()方法的处理相似,只是它转换的是整个值,而不是部分值。

var b1 = Boolean('');                        // false - empty string
var b2 = Boolean('abc');                     // true - not empty string
var b3 = Boolean(100);                       // true - not zero number
var b4 = Boolean(null);                      // false - null
var b5 = Boolean(0);                         // false - zero
var b6 = Boolean(new Object());              // true - object
Number(false)                    // 0
Number(true)                     // 1
Number(undefined)                // NaN
Number(null)                     // 0
Number('5.5')                    // 5.5
Number('56')                     // 56
Number('5.6.7')                  // NaN
Number(new Object())             // NaN
Number(100)                      // 100

  String()与toString()的区别,对null或undefined值强制类型可以转换生产字符串而不引发错误。

var s1 = String(null);       // "null"
var oNull = null;
var s2 = oNull.toString();   // cause error
posted @ 2012-09-24 21:31  libingql  阅读(499)  评论(0编辑  收藏  举报