类型转换

显示转换

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是不相等

关于隐式转换的其他内容,会在后续课程“运算符”中详细介绍。

上一节:数据类型

下一节:表达式