数据类型转换
一、转换成字符串
1、伪对象:
ECMAScript定义所有的对象都有toString()方法,无论是真对象,还是伪对象。
ECMAScript中的Boolean值、数字和字符串都是伪对象,这意味着它们具有属性和方法。这三种伪对象都有toString()方法,可以把它们的值转换成字符串。
2、Boolean类型的toString()方法只能输出字符串"true"或"false"。
var bIsTrue = flase; alert(bIsTrue.toString()); // 输出字符串"false"
3、Number类型的toString()方法有两种模式
3.1 默认模式
整型数值会被解析为对应的字符串
var iNum = 10;
alert(iNum.toString()); // 输出十进制字符串"10"
小数点后全为0的浮点数会被解析为整型字符串
var fNum = 10.00;
alert(fNum.toString()); // 输出十进制字符串"10"
小数点后非零的浮点数会被解析为对应的字符串
var fNum = 10.01;
alert(fNum.toString()); // 输出十进制浮点格式字符串"10.01"
八进制、十六进制整数会被解析为对应的十进制字符串
var iNum = 012; alert(iNum.toString()); // 输出十进制字符串"10" iNum = 0xAA; alert(iNum.toString()); // 输出十进制字符串"170"
注:二进制整数不能使用toString()方法,因为二进制数有前导0时,会被认为是八进制数;无前导0时,会被认为是十进制数
3.2 基模式
可以用不同的基数(进制)输出字符串,基数是toString()方法的参数。
二进制的基数是2,八进制的基数是8,16进制的基数是16,默认的基数是10。
var iNum = 10; alert(iNum.toString(2)); // 输出二进制字符串"1010" alert(iNum.toString(8)); // 输出八进制字符串"12" alert(iNum.toString(16)) // 输出十六进制字符串"a"
注:十进制的基数是10,对数字调用toString(10)与toString()相同。
4、String类型的toString()方法
var sStr = "hello"; alert(sStr.toString()); // 输出字符串"hello"
注:String类型直接使用即可,不必调用toString()方法。
二、转换成数字
ECMAScript规定只能将Number类型与String类型转换成数字(整型和浮点型),其他类型试图转换的结果都会为NaN(Not a Number)。
var bIsTrue = true; alert(parseInt(bIsTrue)); // 输出NaN
1、parseInt() 方法:
1.1 默认模式
parseInt()方法会从字符串的0位置处开始检查字符,如果0位置处不是数字,该方法将返回NaN;否则依次向后检查字符,直到遇到非数字字符,然后将该字符之前的字符串转换成数字返回。
var sStr = "12345Hello world"; alert(parseInt(sStr)); // 输出数字:12345
sStr = "hello world";
alert(parseInt(sStr)); // 输出:NaN
注:parseInt()方法因为只将参数转换为整数,所以参数中的小数点也被认为是非数字字符。
var iNum = 5.9; alert(parseInt(iNum)); // 输出整数:5 var sStr = "5.9Hello"; alert(parseInt(sStr)); // 输出整数:5
当parseInt()方法的参数为八进制数字;十六进制字符串或数字时,会返回十进制结果:
var sStr = "0xAHello"; alert(parseInt(sStr)); // 输出十进制整数:10 var iNum = 012; alert(parseInt(iNum)); // 输出十进制整数: 10
注:parseInt()方法在默认模式下,当参数为八进制字符串时,在Chrome、IE、FireFox中的执行结果不同;当参数为八进制整数时,执行结果相同。
/* IE9 Chrome 23中输出十进制整数:10 FireFox中输出十进制整数:8 */ var sStr = "010"; alert(parseInt(sStr)); /* IE9、Chrome 23、 FireFox中都输出十进制整数:10 */ var iNum = 010; alert(parseInt(iNum)); /* 建议的写法是为parseInt()方法指定基数,三种浏览器中都统一输出十进制数:8 */ var sStr = "010"; alert(parseInt(sStr, 8));
1.2 基模式(推荐使用)
parseInt()方法的基模式,可以把二进制、八进制、十六进制甚至其他任何进制的字符串及数字转换成十进制整数。
parseInt()方法的第一个参数是待转换的字符串或数字;第二个参数是基数。
var iNum = 0xA; alert(parseInt(iNum, 16)); // 将十六进制整数输出为十进制整数:10 var sStr = "0xAHello"; alert(parseInt(sStr, 16)); // 将包含十六进制数的字符串输出为十进制整数:10
注:建议parseInt()方法中显式使用基数。
2、parseFloat()方法:
parseFloat()方法与parseInt()方法的处理方式相似,但是parseFloat()方法没有基模式。
2.1 当在位置0处检索到无效字符时,将返回NaN。
2.2 当从位置0处依次检索到有效数字,且在这些数字后遇到的第一个小数点是有效字符,再往后依次检索到无效字符(包含第二个小数点),将返回该无效字符之前的浮点数。
2.3 检索到的浮点数,若小数点后无有效数字或全为0,则返回整数。
2.4 类似".01A.BC"这样的字符串将被返回0.01,即返回时会自动加前导0。
2.5 返回的浮点数,小数点后的前导0多于5个时,会以科学计数法的方式返回结果。
2.6 parseFloat()方法不支持八进制与十六进制的字符串,但是支持八进制与十六进制的整数。
var fNum1 = parseFloat(12.00); // 返回:12 var fNum2 = parseFloat("12.00") // 返回:12 var fNum3 = parseFloat(.01); // 返回:0.01 var fNum4 = parseFloat(.01Hello); // 返回:0.01 var fNum5 = parseFloat("hello"); // 返回:NaN var fNum6 = parseFloat("12.10"); // 返回:12.1 var fNum7 = parseFloat("12.12"); // 返回:12.12 var fNum8 = parseFloat("0xA"); // 返回:0 var fNum9 = parseFloat("010"); // 返回:10
三、强制类型转换
强制类型转换会在内存中新开辟一块空间,用于存放由原始值直接转换成的值。
ECMAScript支持以下三种强制类型转换:
1、Boolean(value) --- 将value值的拷贝强制转换成Boolean类型。
2、Number(value) --- 将value值的拷贝强制转换成Number类型。
3、String(value) --- 将value值的拷贝强制转换成String类型。
浙公网安备 33010602011771号