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