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 相关文章推荐
浅析javascript的间隔调用和延时调用
Nov 12 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
Mar 04 Javascript
JavaScript通过join函数连接数组里所有元素的方法
Mar 20 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
Apr 03 Javascript
Jquery组件easyUi实现表单验证示例
Aug 23 Javascript
vue中子组件传递数据给父组件的讲解
Jan 27 Javascript
JS中实现浅拷贝和深拷贝的代码详解
Jun 05 Javascript
开发中常用的25个JavaScript单行代码(小结)
Jun 28 Javascript
Vue Element UI + OSS实现上传文件功能
Jul 31 Javascript
layui动态绑定事件的方法
Sep 20 Javascript
初学vue出现空格警告的原因及其解决方案
Oct 31 Javascript
Javascript前端下载后台传来的文件流代码实例
Aug 18 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的库,结果发现很多东西
2006/12/31 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
php实现的RSS生成类实例
2015/04/23 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
window.returnValue使用方法示例介绍
2014/07/03 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
Javascript连接Access数据库完整实例
2015/08/03 Javascript
浅谈JS中逗号运算符的用法
2016/06/12 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
package.json文件配置详解
2017/06/15 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
实例讲解React 组件
2020/07/07 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
Python实现把数字转换成中文
2015/06/29 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
Joseph官网:英国小众奢侈品牌
2019/05/17 全球购物
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度
2015/11/18 面试题
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
《地震中的父与子》教学反思
2014/04/10 职场文书
新员工入职欢迎词
2015/01/23 职场文书
教师聘用意向书
2015/05/11 职场文书
保护环境建议书作文300字
2015/09/14 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书
python tkinter模块的简单使用
2021/04/07 Python