前面我们探讨了js的数据类型的转换,在算术运算符的操作过程中除了正常的加减乘除还可以进行了隐式的数据类型转换来实现一些神奇的功能像拼接字符串,但也有许多特例,比如null==undefined时是相等的,但 null===undefined就返回false.我们一起看看吧.
算数运算符
+ :加法的作用
- 求两个数字类型的和(如果+两侧的数据类型不是数字类型,那么会把数据类型转换为数字,然后相加)
1+1 = 2
1+true = 2 -> 1+ Number(true) = 1+1=2
1+ undefined -> 1+ Number(undefined) = NaN
- 字符串的拼接(如果+两侧的数据类型是字符串类型,那么会把数据类型转换为字符串,然后拼接)
1+’1′ = ’11’
-: 减法求两个数字类型的差
1-true = 0->1-Number(true)->1-1->0
* :乘求两个数字类型的积
null*undefined -> 0*NaN->NaN
/ 除求两个数字类型的商
0/0 ->NaN
[1]/true->1
1/0 ->Infinity
1/null ->Infinity
0/1 -> 0
%取余
2%3 =2
练习
null+typeof undefined -> “null”+”undefined” ->”nullundefined”
由于typeof运算符优先级高于+
2+true
2+1->3
false+NaN
0+NaN =NaN
null+undefined
0+NaN =NaN
null+[1,2,3]
‘null1,2,3’
运算符优先级
运算符的优先级
一元运算符
+一元运算符的作用
对数字类型的数字取正
转换其他类型为number,可以替代Number()函数
+true -> 1
+undefined ->NaN
-true+false -> -1
+null + function(){} -> ‘0function(){}’
null + -true -> -1
比较运算符
==判断两个数字类型是否相等
当两个数据类型不相等时候,会把数据类型转换为数字类型然后比较
5 == 3 =>false
1 == true =>true
1 == ‘2’ =>false
1 == [1] =>true
1 == [1,2] =>false
NaN == NaN =>false
特例:null==undefined ->true
这里我觉得是同时转换为布尔类型而不是数值类型,所以相等
null==null ->true
undefined == undefined ->true
结:论 当null或者undefined除了自身和对方比较外都不相等
===判断两个数据类型是否相等
1===’1′ false
[] === [] =>false
引用值在===的时候全是false,就算值相等但地址不同
null===undefined ->false
>比较运算符
true > null -> true
true >undefined -> 1>NaN =>false
特例中的特例:
第一种
‘1,2’==[1,2]
字符串和对象作比较时数据会先将对象隐式转换为字符串
‘1,2’==[1,2] -> ‘1,2’==’1,2′ true
而不是先将级别低的数据类型转换为数字型
‘1,2’==[1,2] -> NaN ==NaN false此为错误分析
第二种
字符串与字符串同时比较,会按照ascall比较,而不是转换为数字类型
’11’>’2′ ->false
’21’ > ‘2’ ->true
先看左右字符串第一位数ascall的大小比较
看过了五花八门的运算符中的数据转换,我们就很轻松应对一些奇怪的数据类型转换了.