类型转换
显示转换
1.通过Boolean()、Number()、String()或Object()函数进行的转换。
1 2 3 4 | Number( "3" ); //将字符串3转换为数字3 String( false ); //将布尔值false转换为字符串false Boolean([]); //将一对中括号转换为布尔值true Object(2); //相当于new Number(3) |
要注意:Number()只能基于十进制进行转换,例如十六进制的“0xf”,则将其转换为相同大小的十进制整数数值15。并且不能出现非法的尾随字符,否则都将返回NaN。
2. toString()方法
除了null和undefined之外的其他值都有toString()方法,与String()返回值一样。该方法还可以接受一个参数,表示要转换的基数。默认不填参数,则表示十进制。
- 2:表示二进制
- 8:表示八进制
- 16:表示十六进制
1 2 3 4 5 6 7 | alert([1,2,3].toString()); //1,2,3 var n = 17; var binary_string = n.toString(2); var octal_string = "0" + n.toString(8); var hex_string = "0x" + n.toString(16); alert( '十进制数17,转换为二进制为:' + binary_string + ';转换为八进制为:' + octal_string + ';转换为十六进制为:' + hex_string + '。' ); //十进制数17,转换为二进制为:10001;转换为八进制为:021;转换为十六进制为:0x11。 |
3. toFixed()方法
会按照指定的小数位返回数字的字符串表示。
1 2 3 4 | var n = 123456.789; alert(n.toFixed(0)); //"123457" 四舍五入 alert(n.toFixed(2)); //"123456.79" 四舍五入 alert(n.toFixed(5)); //"123456.78900" 不足位数补0 |
4. toExponential()方法
使用指数计数法将数字转换为指数形式字符串,其中小数点前只有一位,小数点后的位数有传入的参数决定。
1 2 3 4 | var n = 123456.789; alert(n.toExponential(1)); //"1.2e+5" 四舍五入 alert(n.toExponential(3)); //"1.235e+5" 四舍五入 alert(n.toExponential(10)); //"1.2345678900e+5" 不足位数补0 |
5. toPrecision()方法
根据制定的有效数字位数将数值转换为字符串。如果有效数字位数少于数字整数部分位数,将转换为指数计数法。
1 2 3 | var n = 123456.789; alert(n.toPrecision(4)); //"1.235e+5" 四舍五入 alert(n.toPrecision(7)); //"123456.8" 四舍五入 alert(n.toPrecision(10)); //"123456.7890" 不足位数补0 |
6. parseInt()方法和parseFloat()方法
这两个方法都将传入的参数转换为数字直接量。并且都会忽略任意数量的前导空格,并忽略后面的非法的数值直接量。如果第一个非空格字符是非法的数值直接量,终将返回NaN。
parseInt()只解析整数,而parseFloat()方法可以解析整数和浮点数。
parseInt()如果前导是“0x”或者“0X”,parseInt()将解析为十六进制数;在使用parseInt解析八进制字面量的字符串时,如“070”,ECMAscript3将其当做八进制字面量,输出对应的十进制数值56,ECMAscript5会输出70。
parseInt()可以接收第二个可选参数,这个参数指定数字转换的基数(即多少进制)。
parseFloat()只解析十进制值
1 2 3 4 5 6 7 8 9 10 11 12 13 | alert(parseInt( "3 blind mice" )); //3 alert(parseInt( "0xff" )); //255 alert(parseInt( "-12.34" )); //-12 alert(parseInt( "-0xff" )); //-255 alert(parseInt( ".1" )); //NaN alert(parseInt( "11" ),2); //3 alert(parseInt( "ff" ),16); //255 alert(parseInt( "077" ),8); //63 alert(parseInt( "077" ),10); //77 alert(parseFloat( "0.1" )); //0.1 alert(parseFloat( "$72.47" )); //NaN alert(parseFloat( "3.14.12" )); //3.14 alert(parseFloat( "blind3.15" )); //NaN |
隐式转换
在某些情况下,即使我们不提供显示转换,Javascript也会进行自动类型转换,主要情况有:
1. 用于检测是否为非数值的函数:isNaN()
isNaN()函数,经测试发现,该函数会尝试将参数值用Number()进行转换,如果结果为“非数值”则返回true,否则返回false。
2. 运算符造成的隐式转换
Javascript的变量是松散类型的,它可以存储Javascript支持的任何数据类型。Javascript会根据需要,对数据自行进行转换。但是一个值能转换为另一个值并不意味着两个值是相等的。比如:
1 2 | alert( "7" * "4" ); //28 alert( "7" === 7); //false. 严格相等不进行类型转换,字符串7和数字7是不相等 |
关于隐式转换的其他内容,会在后续课程“运算符”中详细介绍。