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 相关文章推荐
扩展easyui.datagrid,添加数据loading遮罩效果代码
Nov 02 Javascript
实例说明为什么不要行内使用javascript
Apr 18 Javascript
JavaScript中的alert()函数使用技巧详解
Dec 29 Javascript
jQuery内部原理和实现方式浅析
Feb 03 Javascript
jQuery实现个性翻牌效果导航菜单的方法
Mar 09 Javascript
javascript 将共享属性迁移到原型中去的实现方法
Aug 31 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
Oct 14 Javascript
js 动态生成html 触发事件传参字符转义的实例
Feb 14 Javascript
JavaScript 用fetch 实现异步下载文件功能
Jul 21 Javascript
Vue使用NPM方式搭建项目
Oct 25 Javascript
vue实现弹幕功能
Oct 25 Javascript
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
Nov 16 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
php模拟socket一次连接,多次发送数据的实现代码
2011/07/26 PHP
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
解析PHP 5.5 新特性
2013/07/02 PHP
PHP图片加水印实现方法
2016/05/06 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
jquery获得下拉框值的代码
2011/08/13 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
Python通过len函数返回对象长度
2020/10/22 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
StringBuilder和String的区别
2015/05/18 面试题
电子商务专业实习生自我鉴定
2013/09/24 职场文书
大学四年学习的自我评价分享
2013/12/09 职场文书
技术总监管理职责范本
2014/03/06 职场文书
个人自荐书范文
2015/03/09 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书
Go Plugins插件的实现方式
2021/08/07 Golang
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server