JavaScript的类型转换(字符转数字,数字转字符)
2015-07-30 19:34
645 查看
在Java中,基本类型之间的强制转换也不是这样的,比如,整数要转换成字符串,必须使用Integer.toString()静态方法或者String.valueOf()静态方法,把字符串转换为整数,必须使用Integer.valueOf()。
可见,不能把JavaScript中的类型转换看作为“强制类型转换”。
在JavaScript中,Double类型和Int类型都是看作为Number对象,因此无论是typeof 1还是typeof 1.0,都是返回number。这样我们可以不用去管是Int还是Double类型,让JavaScript解释引擎内部去处理。
如果要把Number转换成String,可以使用Number的toString()方法,(象(1).toString()括号必须或者 1 .toString()空格必须,否则会编译出错,如果是变量则无需),或者调用String()函数,这两种方法都会自动调用解释引擎内部的 NumberToString(),或者根据进制调用其它函数,基本类似。
如果要把String转换成Number,可以使用Number()函数,他会自动判断String中是整数还是浮点数,然后内部使用相应的数据类型,另外可以使用全局函数parseInt()和parseFloat(),他们根据你的要求进行转换。同样的,他们在解释引擎内部机制上是使用了 StringToNumber,StringToInt等等内部的函数。
而如果是Double转换成Int,必须使用Math.floor()函数(截尾取整)或者Math.round()(四舍五入)
Int转换成Double,无须考虑任何问题,直接把Int当成Double进行运算
注:Number、String函数是特殊的函数,在JS引擎中,他会自动判断是作为构造函数调用还是普通调用,所以既可以使用new关键字,也可以作为函数直接调用。
关于JS的参考手册,微软有一个CHM十分不错,指南、API参考都有,是Windows脚本技术,中文版,我在MSDN上下载的。而关于JS解释引擎的,我参考的是Netscape的Spidermonkey,现在由Mozilla组织维护。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
for(i=0;i<this.all.length;i++){
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
vTotal+=Number(this.all[i].Value);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
得出是数字的累加
不然成字符串连接了
众所周知,JavaScript 是一种弱类型的脚本语言。其在声明变量时,无须指定数据类型,这也就给予了JavaScript所需要的灵活性和简单性。JavaScrip对数据类型的灵活处理方式的一个重要体现是自动类型转换。今天,我就把书中的这个JavaScript数据类型自动转换的表抄给大家。让兄弟们做到心中有数。
简单说明一下,这个as is 的意思应该是——和它原来的一样。即,比如最后一行的对象,在被当做对象时,其应该没有变化,即还是被当作自身的对象。
引用
javaScript支持自动类型转换:
Java代码
![](http://hanxin0311.iteye.com/images/icon_star.png)
<script>
var a = "3.145";
var b = a - 2;//将a的类型转换成数字;
var c = a + 2;//将a的类型转换成字符串;
alert (b + "\n" + c);
</script>
引用
JavaScript还提供几个支持强制类型转换的函数。
toString():将布尔值、数字等转换成字符串。
parseInt():将字符串、布尔值等转换成整数。
parseFloat():将字符串、布尔值等转换成浮点数。
eval():将字符串表达式转换成数字值。例如,语句total=eval("432.1*10")的结果是total=4321即将数值4321赋予total变量。
Java代码
![](http://hanxin0311.iteye.com/images/icon_star.png)
<script>
var a = "3.145";
var b = a + 2;
var c = parseFloat(a) + 2;
alert (b + "\n" + c);
</script>
引用
各种类型向数字转换的结果如下:
undefined值:转换成NaN。
null值:转换成0.
布尔值:值为true,转换成1;值为false,转换成0.
字符串值:如果字符串是数字形式,转换成数字,否则转换成NaN。
其他对象:转换成NaN.
引用
各种类型向字符串转换的结果如下:
undefined值:转换成"undefined"。
null值:转换成"null".
布尔值:值为true,转换成"true";值为false,转换成"false".
数字型值:NaN或数字型变量的完整字符串。
其他对象:如果该对象的toString()方法存在,则返回toString方法的返回值,否则返回undefined.
引用
各种类型向布尔型转换的结果如下:
undefined值:转换成"false。
null值:转换成false。
字符串值:如果字符串为空字符串,返回false;否则返回true。
数字型值:如果数字为0或NaN,返回false。;否则返回true。
其他对象:总是返回true;
在Java中,基本类型之间的强制转换也不是这样的,比如,整数要转换成字符串,必须使用Integer.toString()静态方法或者String.valueOf()静态方法,把字符串转换为整数,必须使用Integer.valueOf()。
可见,不能把JavaScript中的类型转换看作为“强制类型转换”。
在JavaScript中,Double类型和Int类型都是看作为Number对象,因此无论是typeof 1还是typeof 1.0,都是返回number。这样我们可以不用去管是Int还是Double类型,让JavaScript解释引擎内部去处理。
如果要把Number转换成String,可以使用Number的toString()方法,(象(1).toString()括号必须或者 1 .toString()空格必须,否则会编译出错,如果是变量则无需),或者调用String()函数,这两种方法都会自动调用解释引擎内部的 NumberToString(),或者根据进制调用其它函数,基本类似。
如果要把String转换成Number,可以使用Number()函数,他会自动判断String中是整数还是浮点数,然后内部使用相应的数据类型,另外可以使用全局函数parseInt()和parseFloat(),他们根据你的要求进行转换。同样的,他们在解释引擎内部机制上是使用了 StringToNumber,StringToInt等等内部的函数。
而如果是Double转换成Int,必须使用Math.floor()函数(截尾取整)或者Math.round()(四舍五入)
Int转换成Double,无须考虑任何问题,直接把Int当成Double进行运算
注:Number、String函数是特殊的函数,在JS引擎中,他会自动判断是作为构造函数调用还是普通调用,所以既可以使用new关键字,也可以作为函数直接调用。
关于JS的参考手册,微软有一个CHM十分不错,指南、API参考都有,是Windows脚本技术,中文版,我在MSDN上下载的。而关于JS解释引擎的,我参考的是Netscape的Spidermonkey,现在由Mozilla组织维护
![](http://xiang.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
for(i=0;i<this.all.length;i++){
![](http://xiang.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
vTotal+=Number(this.all[i].Value);
![](http://xiang.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://xiang.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
得出是数字的累加
不然成字符串连接了
下面的表格总结了javascript中的每一种转换,并且针对一种特定类型的值用于特定环境中给出了所执行的转换。
javascript自动数据类型转换表
写在这里以备查看。
这再记录点容易出问题的东东:
1. 虽然undefined和null值不同,但是 ==运算符却将两者看作相等。看如下的表达式:
如果属性my.pro并不存在,或者它存在但是值为null,那么这个比较表达式的值为true。由于null和undefined都表示缺少值,所以这种相等性正是我们想要的。但是如果必须去人这两者,可以使用===运算符或者typeof运算符。
2.NaN
当一个算数运算(如用0来除0)产生了未定义的结果或错误时,就会返回另一个特殊的javascript数值。这种情况下结果是一个非数字的特殊值,输出为NaN。它和任何值都不相等包括它本身,可以用isNaN()来检测这个值。
可见,不能把JavaScript中的类型转换看作为“强制类型转换”。
在JavaScript中,Double类型和Int类型都是看作为Number对象,因此无论是typeof 1还是typeof 1.0,都是返回number。这样我们可以不用去管是Int还是Double类型,让JavaScript解释引擎内部去处理。
如果要把Number转换成String,可以使用Number的toString()方法,(象(1).toString()括号必须或者 1 .toString()空格必须,否则会编译出错,如果是变量则无需),或者调用String()函数,这两种方法都会自动调用解释引擎内部的 NumberToString(),或者根据进制调用其它函数,基本类似。
如果要把String转换成Number,可以使用Number()函数,他会自动判断String中是整数还是浮点数,然后内部使用相应的数据类型,另外可以使用全局函数parseInt()和parseFloat(),他们根据你的要求进行转换。同样的,他们在解释引擎内部机制上是使用了 StringToNumber,StringToInt等等内部的函数。
而如果是Double转换成Int,必须使用Math.floor()函数(截尾取整)或者Math.round()(四舍五入)
Int转换成Double,无须考虑任何问题,直接把Int当成Double进行运算
注:Number、String函数是特殊的函数,在JS引擎中,他会自动判断是作为构造函数调用还是普通调用,所以既可以使用new关键字,也可以作为函数直接调用。
关于JS的参考手册,微软有一个CHM十分不错,指南、API参考都有,是Windows脚本技术,中文版,我在MSDN上下载的。而关于JS解释引擎的,我参考的是Netscape的Spidermonkey,现在由Mozilla组织维护。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
for(i=0;i<this.all.length;i++){
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
vTotal+=Number(this.all[i].Value);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
得出是数字的累加
不然成字符串连接了
众所周知,JavaScript 是一种弱类型的脚本语言。其在声明变量时,无须指定数据类型,这也就给予了JavaScript所需要的灵活性和简单性。JavaScrip对数据类型的灵活处理方式的一个重要体现是自动类型转换。今天,我就把书中的这个JavaScript数据类型自动转换的表抄给大家。让兄弟们做到心中有数。
值 | 字符串 | 数字 | 布尔值 | 对象 |
---|---|---|---|---|
定义的值 | “undefined” | NaN | false | Error |
null | “null” | 0 | false | Error |
非空字符串 | As is | 字符串中的数字值或NaN | true | String对象 |
空字符串 | As is | 0 | false | String对象 |
0 | “0″ | As is | false | Number对象 |
NaN | “NaN” | As is | false | Number对象 |
无穷大 | “Infinity” | As is | true | Number对象 |
负无穷大 | “-Infinity” | As is | true | Number对象 |
其他所有数字 | 数字的字符串值 | As is | true | Number对象 |
True | “true” | 1 | As is | Boolean对象 |
false | “false” | 0 | As is | Boolean对象 |
对象 | toString() | valueOf()或toString()或NaN | true | As is |
引用
javaScript支持自动类型转换:
Java代码
![](http://hanxin0311.iteye.com/images/icon_star.png)
<script>
var a = "3.145";
var b = a - 2;//将a的类型转换成数字;
var c = a + 2;//将a的类型转换成字符串;
alert (b + "\n" + c);
</script>
引用
JavaScript还提供几个支持强制类型转换的函数。
toString():将布尔值、数字等转换成字符串。
parseInt():将字符串、布尔值等转换成整数。
parseFloat():将字符串、布尔值等转换成浮点数。
eval():将字符串表达式转换成数字值。例如,语句total=eval("432.1*10")的结果是total=4321即将数值4321赋予total变量。
Java代码
![](http://hanxin0311.iteye.com/images/icon_star.png)
<script>
var a = "3.145";
var b = a + 2;
var c = parseFloat(a) + 2;
alert (b + "\n" + c);
</script>
引用
各种类型向数字转换的结果如下:
undefined值:转换成NaN。
null值:转换成0.
布尔值:值为true,转换成1;值为false,转换成0.
字符串值:如果字符串是数字形式,转换成数字,否则转换成NaN。
其他对象:转换成NaN.
引用
各种类型向字符串转换的结果如下:
undefined值:转换成"undefined"。
null值:转换成"null".
布尔值:值为true,转换成"true";值为false,转换成"false".
数字型值:NaN或数字型变量的完整字符串。
其他对象:如果该对象的toString()方法存在,则返回toString方法的返回值,否则返回undefined.
引用
各种类型向布尔型转换的结果如下:
undefined值:转换成"false。
null值:转换成false。
字符串值:如果字符串为空字符串,返回false;否则返回true。
数字型值:如果数字为0或NaN,返回false。;否则返回true。
其他对象:总是返回true;
在Java中,基本类型之间的强制转换也不是这样的,比如,整数要转换成字符串,必须使用Integer.toString()静态方法或者String.valueOf()静态方法,把字符串转换为整数,必须使用Integer.valueOf()。
可见,不能把JavaScript中的类型转换看作为“强制类型转换”。
在JavaScript中,Double类型和Int类型都是看作为Number对象,因此无论是typeof 1还是typeof 1.0,都是返回number。这样我们可以不用去管是Int还是Double类型,让JavaScript解释引擎内部去处理。
如果要把Number转换成String,可以使用Number的toString()方法,(象(1).toString()括号必须或者 1 .toString()空格必须,否则会编译出错,如果是变量则无需),或者调用String()函数,这两种方法都会自动调用解释引擎内部的 NumberToString(),或者根据进制调用其它函数,基本类似。
如果要把String转换成Number,可以使用Number()函数,他会自动判断String中是整数还是浮点数,然后内部使用相应的数据类型,另外可以使用全局函数parseInt()和parseFloat(),他们根据你的要求进行转换。同样的,他们在解释引擎内部机制上是使用了 StringToNumber,StringToInt等等内部的函数。
而如果是Double转换成Int,必须使用Math.floor()函数(截尾取整)或者Math.round()(四舍五入)
Int转换成Double,无须考虑任何问题,直接把Int当成Double进行运算
注:Number、String函数是特殊的函数,在JS引擎中,他会自动判断是作为构造函数调用还是普通调用,所以既可以使用new关键字,也可以作为函数直接调用。
关于JS的参考手册,微软有一个CHM十分不错,指南、API参考都有,是Windows脚本技术,中文版,我在MSDN上下载的。而关于JS解释引擎的,我参考的是Netscape的Spidermonkey,现在由Mozilla组织维护
![](http://xiang.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
for(i=0;i<this.all.length;i++){
![](http://xiang.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
vTotal+=Number(this.all[i].Value);
![](http://xiang.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://xiang.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
得出是数字的累加
不然成字符串连接了
下面的表格总结了javascript中的每一种转换,并且针对一种特定类型的值用于特定环境中给出了所执行的转换。
javascript自动数据类型转换表
值 | 字符串 | 数字 | 布尔值 | 对象 |
---|---|---|---|---|
定义的值 | “undefined” | NaN | false | Error |
null | “null” | 0 | false | Error |
非空字符串 | 不变 | 字符串中的数字值或NaN | true | String对象 |
空字符串 | 不变 | 0 | false | String对象 |
0 | “0″ | 不变 | false | Number对象 |
NaN | “NaN” | 不变 | false | Number对象 |
无穷大 | “Infinity” | 不变 | true | Number对象 |
负无穷大 | “-Infinity” | 不变 | true | Number对象 |
其他所有数字 | 数字的字符串值 | 不变 | true | Number对象 |
True | “true” | 1 | 不变 | Boolean对象 |
false | “false” | 0 | 不变 | Boolean对象 |
对象 | toString() | valueOf()或toString()或NaN | true | 不变 |
这再记录点容易出问题的东东:
1. 虽然undefined和null值不同,但是 ==运算符却将两者看作相等。看如下的表达式:
my.pro == null;//return: ture
如果属性my.pro并不存在,或者它存在但是值为null,那么这个比较表达式的值为true。由于null和undefined都表示缺少值,所以这种相等性正是我们想要的。但是如果必须去人这两者,可以使用===运算符或者typeof运算符。
2.NaN
当一个算数运算(如用0来除0)产生了未定义的结果或错误时,就会返回另一个特殊的javascript数值。这种情况下结果是一个非数字的特殊值,输出为NaN。它和任何值都不相等包括它本身,可以用isNaN()来检测这个值。
相关文章推荐
- 使用Jsoup库解析HTML、XML或URL链接中的DOM节点
- JSTL中<fmt:bundle >找不到properties文件的原因
- BZOJ 2208 [Jsoi2010]连通数 tarjan缩点+bitset优化DP
- JSON详解
- ajax请求跨域问题-通过jsonp方式解决
- js 弹出alert框
- json字符串转换为多级Map -list-map的形式
- js 获取访问链接参数
- JavaScript中操作对象的属性
- javascript实现列表滚动的方法
- [BZOJ1031][JSOI2007]字符加密Cipher
- js正则表达式匹配空格
- js字符串拼接时,日期控件中的双引号需要转义,不能用\"转义,要用&quot;
- JavaScript特效之前进,后退(返回上一级)
- JS魔法堂:再识instanceof
- 表单设计器系列之模板行的设置
- js闭包理解
- javascript 图片延迟加载
- JavaScript总结(终极大总结)
- JavaScript运行命令