在上一篇文章中我们介绍了"JavaScript文档对象模型-DOM2级样式",本文将继续了解:JavaScript数据类型转换。
JavaScript是一种"弱"类型的语言,这就是说,程序中不需要十分关注变量中存储数据的类型。例如可以在一条语句中将一个数值赋值给变量x,在另一条语句中把一个字符串在赋值给同一个变量;也可以将数值与字符串进行比较,将字符串与布尔型数据进行比较。在变量赋值和表达式的计算过程中,JavaScript会根据需要自动完成数据类型的转换。在包括多种类型的混合表达式中,JavaScript必须决定如何处理这个表达式中的各种数据类型。
除了需要将字符串类型转换为数值类型之外,有时候也需要将数值类型转换为字符串类型,或其它数据类型之间进行数据类型的转换。例如,某些对象方法要求一个活多个特定数据类型的的参数,为了正确的使用这些方法,就需要完成适当的数据类型转换工作。
为了适应不同的情况,JavaScript提供了两种数据类型的转换方法:一种使将整个值从一种类型转换为另一种数据类型(称为基本数据类型转换 ),另一种方法是从一个值中提取另一种类型的值,并完成类型转换工作。完成后一张数据类型转换的方法有三个:parseInt()
、ParseFloat()
和eval()
。
基本数据类型转换
JavaScript提供了三个方法实现基本数据类型之间的转换。
-
String()
:将其他数据类型的值转换为字符串,例如:String(123)的值为"123"。 -
Number()
:将其他类型的值转换为数值类型的值,例如:Number(true)的值为1。 -
Boolean()
:将其他类型的值转换为布尔型的值,除了0、NaN
、null
、undefined
、""
(空字符串)被转换为false
之外,所有其他的值都被转换为true
。
这三个方法实际上是同名对象的构造函数。
提取整数的parseInt()方法
parseInt()
方法将字符串转换为整数。其转换过程为:从字符串第一个字符开始读取数字(跳过签到的空白符),知道遇到非数字字符时停止读取,然后将已经提取的数字字符串转换为整数,并返回该整数值。如果字符串的开始位置不是数字,而是其他字符(空白符除外),那么parseInt()
方法返回NaN
,表示所传递的参数不能转换为一个整数。例如:parseInt("100days")
的返回值为100,parseInt("days100")
的返回值为NaN
。
parseInt()
方法还能够完成八进制和十六进制数据的转换。此时,parseInt()
方法需要传入两个参数:第一个是参数要转换为整数的字符串,第二个参数指定按多少进制进行转换,进制的有效范围为2-36,其中包括二进制、八进制、十进制和十六进制。当省略第二个参数时,按十进制进行转换。但是如果字符串以0x
或0X
开头,那么按十六进制进行转换。不论指定哪一种进制进行整数转换,方法parseInt()
总是以十进制值返回结果。
parseInt()
方法是JavaScript的全局函数,它的语法格式为:
parseInt(String);
parseInt(String,NumberBase);
其中String是指定要转换为整数的字符串,NunberBase指定按几进制进行转换,范围从0-36。
下表中是parseInt(String)
方法的应用示例:
| 参数值 | parseInt()返回值 | 参数值 | parseInt()返回值 | |---------------------|---------------|------------|---------------| | "100china" | 100 | "china100" | NaN | | "-100china" | -100 | "china" | NaN | | "100.55china" | 100.55 | ".63" | NaN | | " &nabsp;100china" | 100 | "0Xa" | 10 | | "100.65" | 100 | "0xa" | 10 | | "0.63" | 0 | "0x12abc" | 76476 |
下面是parseInt(String,NumberBase)
语法格式的应用示例:
| 调用格式 | 进制数 | 函数返回值 | |--------------------------|-------|-------------| | parseInt("55china",8) | 八进制 | 45 | | parseInt("55china",16) | 十六进制 | 1372 | | parseInt("55china",10) | 十进制 | 55 | | parseInt("55china",36) | 三十六进制 | 11207215270 | | parseInt("0x55china",8) | 八进制 | 0 | | parseInt("0x55china",16) | 十六进制 | 1372 | | parseInt("55.23china",8) | 八进制 | 45 | | parseInt("china55",8) | 八进制 | NaN | | parseInt("china55",16) | 示例进制 | 12 |
提取浮点数的parseFloat()方法
parseFloat()方法与parseInt()方法相似,不同之处在于parseFloat()
方法能够治好浮点数,而parseInt()
方法只能治好整数。浮点数包含小数部分,如1.23,0.56等,科学计数法书写的数也算浮点数,比如2E3。如果字符串不是以数字开头,那么parseFloat()
方法返回NaN
。
调用parseFloat()
方法的语法格式为:
parseFloat(String);
下面的表格中列出了parseFloat()
方法的一些应用示例:
| 参数值 | parseFloat()返回值 | 参数值 | parseFloat()返回值 | |--------------|-----------------|-----------|-----------------| | "55.2china' | 55.2 | china55.2 | NaN | | "-55.2china" | -55.2 | "china" | NaN | | "55.63china" | 55.63 | ".63" | 0.63 | | " 55.2china" | 55.2 | "3e2" | 300 | | "55.63" | 55.63 | "-3e-2" | -0.03 | | "0.63" | 0.63 | "3e2abc" | 300 |
用于执行语句和计算表达式的eval()方法
eval()
方法能够执行用字符串表示的一段JavaScript代码,比如,执行下面的语句:
eval("k=0,for(i=1;i<101;i++){k+=i;}");
执行后的结果为5050。利用eval()
方法的这种特性,程序可以根据需要动态的生成并执行语句,这样可以进一步增强JavaScript程序执行的能力。
表达式是JavScript的一种特殊语句,eval()
方法也能够用于计算表达式的值,这时,表达式以字符串形式传递给eval()
方法,例如,执行下面的语句:
rs=eval( "(9+5)*2" );
结果变量rs的值为28。
如果传递给eval()
方法中的参数的语句中没有返回值,那么eval()
方法返回undefined
,例如:
eval("var abc");//返回undefined
如果传递给eval()
方法中的参数不是有效的JavaScript语句,那么就会产生运行错误。例如:
eval("abc");
eval()
方法的语法格式为:
eval(String);
其中,String是由JavaScript语句或表达式组成的一个字符串。需要注意的是,这里的String只能是基本数据类型中的字符串,而不能是String对象。否则,eval()
方法直接返回参数字符串,而不是字符串表示的语句。例如下面的代码:
rs = new String("2+3*6-3");
a = eval(rs);
上面代码执行后,rs是一个String对象,a的值为字符串"2+3*6-3",而不是这个表达式计算的结果17。如果将上面的语句修改为:
rs = "2+3*6-3";
a = eval(rs);
执行后,rs是一个基本数据类型的字符串,a的值为17。
最后需要注意的是eval()
方法存在一些安全方面的隐患,在实际应用中切记不可滥用。