JavaScript类型转换方法及需要注意的问题小结(挺全面)


Posted in Javascript onNovember 11, 2010

一、类型转换的方法和应该注意的问题:
1.
转换为布尔型:
1)用两次非运算(!):
!!5 ==> true
2)用布尔型的构造函数:
new Boolean(5) == > true
值转换为布尔类型为false
0
+0-0NaN""(空字符串),undefined,null
除上面的值其他值在转换以后为true,需要特别提到的是:
"0",new Object(),function(){}
2.
转换为字符串类型:
1)加上空字符串""
123 +
 "" = "123"
2)用字符串构造函数:
new String(123) = "123".
需要特别注意的转化:
+0 ==> "0"
-0 ==> "0"
-Infinity ==>"-Infinity"
+Infinity ==>"+Infinity"
NaN ==> "NaN"
undefined ==> "undefined"
null ==> "null"
new Object() ==> "[object Object]"
function(){} ==> "function(){}"
3.
转换为数值型:
1 取正(+), 减零 -0), 乘一,(*1),除以一(/1),取负(-,这个得到相反的值)。
+"123" = 123
+true = 1
2)用构造函数Number();
new Number("123") = 123
几个需要特别注意的转化:
""
(空字符串) ==> 0
"010" ==> 10
"0x10"(16
进制) ==> 16
"-010" ==> -10
"-0x10" ==> NaN
undefined ==> NaN
null ==> 0
true ==> 1
false ==> 0
new Object() ==> NaN
new function(){} ==> NaN

二、隐式类型转换:
(1)
二元加法运算(+):如果两个操作数中有一个是String类型,将把两个操作数转换为String类型再相加。
如果两个操作数中没有字符串类型,那么将把两个操作数转换为数值类型再做运算。
举例:
"123"+123 = "123123";
123+123 = 246
true + true = 2
true + undefined = NaN
(因为undefined转换为数值为NaN,所有结果为NaN)
true + null = 1 (null
转换为数字是0)
"123" + null = "123null" (
包含字符串将转化为字符串相加)
"123" + undefined = "123undefined"
undefined同样适用)
1 + 2 + "123" = "3123" (1+2
是首先按照数值型计算的)
(2)
二元减乘除运算(-*/):因为只有数值类型才有 - * / 运算,所以会先将两个操作数转换为数值型再做运算。
"123"-123 = 0
(3)
一元取正(+),取负运算符(-):取正或者取负都是针对数值型的运算,所以会将操作数转换为数值型再做运算。
+"123" = 123
-"123" = -123
+"123e" = NaN
+"123f" = NaN
+"123e-2" = 1.23 
(4)
一元非(!)运算符:非运算符需要将操作数转化为布尔类型。
!"123" = false
!!"123" = true
!123 = false
!!123 = true
(5)
逻辑运算符(&&)和(||):
&&或者||的两侧被判断的时候会被转为布尔类型进行判断,
但是我在测试的时候却发现一个有趣的事情。
&&
运算符:如果有一个项为false,那么表达式返回false,如果所有的项都不为false,那么表达式返回最右边一个项的原始值。
举例:
123 && 23 && 45
返回 45,而不是我们想象中的true.
所以如果有 123 && 23 == true 那么应该是false
至于if(123 && 23) 认为是true那应该是把23转换为布尔类型了。
||
运算符:
|| 测试的结果也和我想象的不一样,|| 返回第一个转换以后不为false的值,如果都为false,它将返回最后一个为false的值(未进行类型转化之前的值)。
举例: 
123 || 23
返回 123,而不是想象中的true.
false || null
返回null 而不是想象中的false
三、类型转换函数
1.
parseFloat转换为浮点数:
字符解析函数获取每一个字符直到遇到不属于数值的字符,然后返回它已获取的数值.
几个需要特别注意的:
""
(空字符串) ==> NaN
"123e-2" == > 1.23 (
科学计算法是可以识别的)
"010" ==> 10 (8
进制不能识别)
"0x10"==> 0 (16
进制不识别)
"-010" ==> -10 
null,undefined,true,false,new Object(),function(){} ==> NaN
2.parseInt
转换为有符号整数:
parseFloat相似,但是他会把小数位舍掉(注意不是四舍五入,是完全舍弃,跟Math.floor处理方式一样),而且他可以识别八进制和16进制表示方式:
123e-2 == > 1
"123e-2" ==> 123
"010" == > 8 
"0x10" ==> 16
"-010" == > -8 
"-0x10" ==> -16
null,undefined,true,false,new Object(),function(){},-Infinity +Infinity NaN ==> NaN
3.
三个取整函数的区别
1Math.ceil():“天花板,很形象吧?就是取大于等于参数的最小整数。
8.7 == > 9
-8.7==> -8
2Math.floor():"地板",取小于等于参数的最小整数。
8.7 ==> 8
-8.7 ==> -9
3Math.round():"四舍五入"取整数。

Javascript 相关文章推荐
jquery实现动态菜单的实例代码
Nov 28 Javascript
javascript通过className来获取元素的简单示例代码
Jan 10 Javascript
document.forms[].submit()使用介绍
Feb 19 Javascript
类似天猫商品详情随浏览器移动的示例代码
Feb 27 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
Aug 22 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
Feb 13 Javascript
JSON字符串和JSON对象相互转化实例详解
Jan 05 Javascript
JS中传递参数的几种不同方法比较
Jan 20 Javascript
JavaScript实现时钟滴答声效果
Jan 29 Javascript
详解Javascript中DOM的范围
Feb 13 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
Sep 04 Javascript
React数据传递之组件内部通信的方法
Dec 31 Javascript
javascript正则表达式中参数g(全局)的作用
Nov 11 #Javascript
工作中常用到的JS表单验证代码(包括例子)
Nov 11 #Javascript
CSS和JS标签style属性对照表(方便js开发的朋友)
Nov 11 #Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
Nov 11 #Javascript
关于firefox的ElementTraversal 接口 使用说明
Nov 11 #Javascript
将string解析为json的几种方式小结
Nov 11 #Javascript
js读取本地excel文档数据的代码
Nov 11 #Javascript
You might like
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
JavaScript Array扩展实现代码
2009/10/14 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
浅谈Vue.js 1.x 和 2.x 实例的生命周期
2017/07/25 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
2020/09/21 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
python 判断一个进程是否存在
2009/04/09 Python
python 换位密码算法的实例详解
2017/07/19 Python
用python实现的线程池实例代码
2018/01/06 Python
python使用logging模块发送邮件代码示例
2018/01/18 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
Python的历史与优缺点整理
2020/05/26 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
运动会广播稿60字
2014/01/15 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
2014年教研员工作总结
2014/12/23 职场文书
旷课检讨书范文
2015/01/27 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
中标通知书格式
2015/04/17 职场文书
运动会闭幕式致辞
2015/07/29 职场文书
欢送领导祝酒词
2015/08/12 职场文书
2016庆祝教师节新闻稿
2015/11/25 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
CSS3鼠标悬浮过渡缩放效果
2021/04/17 HTML / CSS
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL