您好,欢迎访问一九零五行业门户网

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

一、类型转换的方法和应该注意的问题:
1.转换为布尔型:
(1)用两次非运算(!):
!!5 ==> true
(2)用布尔型的构造函数:
new boolean(5) == > true
值转换为布尔类型为false:
0,+0,-0,nan,(空字符串),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.三个取整函数的区别:
(1)math.ceil():“天花板”,很形象吧?就是取大于等于参数的最小整数。
8.7 == > 9
-8.7==> -8
(2)math.floor():地板,取小于等于参数的最小整数。
8.7 ==> 8
-8.7 ==> -9
(3)math.round():四舍五入取整数。
其它类似信息

推荐信息