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 (十) jQueryUI常用功能实战
Feb 23 Javascript
改变隐藏的input中value的值代码
Dec 30 Javascript
div失去焦点事件实现思路
Apr 22 Javascript
js实现简单的联动菜单效果
Aug 19 Javascript
js实现卡片式项目管理界面UI设计效果
Dec 08 Javascript
AngularJS 输入验证详解及实例代码
Jul 28 Javascript
浅谈JavaScript 覆盖原型以及更改原型
Aug 31 Javascript
js对象浅拷贝和深拷贝详解
Sep 05 Javascript
JS仿京东移动端手指拨动切换轮播图效果
Apr 10 Javascript
js replace()去除代码中空格的实例
Feb 14 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
Apr 27 Javascript
详解webpack require.ensure与require AMD的区别
Dec 13 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.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
Javascript引用指针使用介绍
2012/11/07 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
javascript控制台详解
2015/06/25 Javascript
js简单工厂模式用法实例
2015/06/30 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
python实现复制整个目录的方法
2015/05/12 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
python实现公司年会抽奖程序
2019/01/22 Python
pandas去除重复列的实现方法
2019/01/29 Python
Python操作rabbitMQ的示例代码
2019/03/19 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
.NET面试题:什么是反射
2016/09/30 面试题
渗透攻击的测试步骤
2014/06/07 面试题
全国税务系统先进集体事迹材料
2014/05/19 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
2014年学习部工作总结
2014/11/12 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
详解TypeScript的基础类型
2022/02/18 Javascript