JavaScript基础:(加号,数值转换,布尔转换)
JavaScript中加号运算符"+" 运算过程理解
1) 如果其中一个操作数是对象,则对象会遵循对象到原始值的转换规则转换为原始值。日期对象通过toString()方法执行转换,其它对象则通过valueOf()方法执行转换。由于多数对象都不具备valueOf()方法,因此就会调用toString()方法来进行转换。
2)在进行对象到原始值的转换后,如果其中一个操作数是字符串的话,则另一个操作数也会转换为字符串,然后进行字符串的连接操作。
3)否则,两个操作数都将转换为数字(或者NaN),然后进行加法操作。
不同类型操作数相加后的类型如下表:
undefined1 | null2 | boolean3 | number4 | string | |
undefined | number(NaN) | number | number | number | string |
null | number(NaN) | number(0) | number | number | string |
boolean | number(NaN) | number(1或0) | number | number | string |
number | number(NaN) | number | number | number | string |
string |
string |
string | string | string | string |
1、
“a”+undefined = “aundefined”;
总结:任何基本数据类型(除String外)+undefined都为number类型,值为NaN
2、
true+null=1;(true转为1,null转为0)
false+null=0;(false转为0,null转为0)
10+null=10;
null+“str”=”nullstr”;
3、
true+true=2;(true转为1)
true+false=1;(true转为1,false转为0)
10+true=11;(true转为1)
true+“1”=“true1”;
4、
6+“77”=“677”
JavaScript中parseInt()和parseFloat()非强制转换,Number()强制转换
1、parseInt(string, radix): 函数可解析一个字符串,并返回一个整数。
当忽略参数 radix , JavaScript 默认数字的基数如下:当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
- 如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
- 如果 string 以 0 开头,ECMAScript版本小于ECMAScript 5,当字符串以"0"开头时默认使用八进制,ECMAScript 5使用的是十进制
- 如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
例:
parseInt(“123”);123
parseInt(“ 0消费”);0(忽略前面的空格)
parseInt(“0xf”);15
parseInt(“0 xf”);0 (中间的空格不忽略)
2、parseFloat(string): 函数可解析一个字符串,并返回一个浮点数。
提示和注释
开头和结尾的空格是允许的。
提示:如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。
提示:如果只想解析数字的整数部分,请使用 parseInt() 方法。
实例
例子 1
在本例中,我们将使用 parseFloat() 来解析不同的字符串:
<script type="text/javascript"> document.write(parseFloat("10")) document.write(parseFloat("10.00")) document.write(parseFloat("10.33")) document.write(parseFloat("34 45 66")) document.write(parseFloat(" 60 ")) document.write(parseFloat("40 years")) document.write(parseFloat("He was 40")) </script>
输出:
10 10 10.33 34 60 40 NaN
例子 2
下面的例子都返回 3.14:
<script type="text/javascript"> document.write(parseFloat("3.14")) document.write(parseFloat("314e-2")) document.write(parseFloat("0.0314E+2")) document.write(parseFloat("3.14more non-digit characters")) </script>
输出:
3.14
例子 3
下面的例子将返回 NaN:
<script type="text/javascript"> document.write(parseFloat("FF2")) </script>
输出:
NaN
3、Number():强制转化,如果转换的是字符串,字符串内必须都是有效的数字字符才可以转换,如过有一个不是有效数字,则无法转换,会返回NaN。
var cur="1adc";
var str="1";
console.log(Number(cur));//NaN
console.log(Number(str));//1
4、Booleanr():强制转化
1、除0(-0)之外的所有数字,转换为boolean型都为true
2、除“”(空字符串)之外的所有字符转为boolean 都为true,空格字符串也为true
3、null和undefined转换为boolean型是false
4、特殊数字NaN转为boolean型也为false
(有就true,无就false,特殊NaN永远都是false)