1.3 运算符与表达式
1.3.1算术运算符 NaN与任何数字做运算结果都是NaN
有+ - * / %(取模) ++ --
+ 号两侧都是数字,则相加
+号有一侧/两侧是字符串类型或者引用值时,其作用是字符串拼接
加法规则: 1.先把非字符串的转换成字符串
2.转换的字符串和另外一个字符串拼接
减号/乘号/除号/取模两侧都是数字类型 作用:求两个数字的差/积/商/取模
会进行隐式转换
true-false --> 1
2-[3] --> 2-'3' --> 2-3 --> -1 隐式转换为Number类型
2/ [1] --->2/1 ---> 2
2/[1,2] --->2/NaN ---> NaN
[1,2]偷偷转换为”1,2” ,字符串1,2变成数字就是NaN
除了加号之外的运算符,作用只有一个,即只能做对应的数学运算
1.3.2 一元运算符只有一个操作数的运算符
如果操作的是非数字类型 则会隐式转换成数字类型,一元运算符比二元运算符的优先级高
+ 对数字取正 +1==>1
- 对数字取负 -1==>-1
例子:
+false --> +0 --> 0
+[1,23] --> +NaN --> NaN
-true+false -1+0 --> -1
+null+function(){} 一元运算符和算术运算符 谁先算?
猜测 先算一元运算符
1. 0+function(){}
2. 0+'function(){}'
3. '0function(){}'
结论:一元运算符 的优先级高于 算术运算符
1.3.3 自增自减运算符
a++:,a自增1,后,原来a的值保持不变,循环一次后再变化
++a:先自己自增,原来a的值变了自增的值
1.3.4比较运算符 NaN跟任何数做比较都是false
比较运算符有:< > <= >= == === != !==(不绝对等于)
判断两个数据是否相等 相等则结果是true 反之是false
结论:
1. == 两侧都是原始值(非null undefined)时 会把==两侧的数据转换成数字进行比较,字符串和字符串比较时,会按照字符串对应的unicode编码值比较
2.null和undefined 在非 == 判断时 总是false
特例 null==undefined --> true
null==null --> true
undefined==undefined --> true
NaN==NaN --> false
3. ==两侧有一侧是引用值时 会把==两侧的数据转换成字符串进行比较
4. ==两侧都是引用值时 直接返回false
!= 判断两个数据是否不相等 不相等则结果是true 反之是false
=== 判断两个数据是否全等 全等则结果是true 反之是false
结论 : 数据类型不一致 直接是false
!== 判断两个数据是否不全等 不相等则结果是true 反之是false
1.3.5 逻辑运算符
&&(与)对两侧的布尔值进行与运算,作用是找到两侧布尔值中的假值
||(或) 对两侧的布尔值进行或运算,作用是找到两侧布尔值中的真值
!(非) 取反
&&优先级大于||
例子:1||2 --->1 0||function(){} ---> f(){} 1||{} ---> 1 2||{} --->2
[1,3]&&NaN&&typeof null
从左到右 开始找假 [1,3] 转换为布尔值,只有0 NaN undefind null false “”才是false,所以是真,就不找,NAN--->0 ,false 然后停,输出
true&&[1,3] --> [1,3]
[1,3]&&typeof null --> 'object'
[1,3]&&NaN&&typeof null --> NaN
false||’heaven’ --> 'heaven'
null||typeof undefined --> 'undefined'
null||typeof undefined|| typeof typeof undefined -->'undefined'
(!!''+!!" "-!!false)&&null
1. (false+true-false)&&null
2. (0+1-0)&&null
3. 1&&null
4. null
(!!''+!!" "-!!false)||[1,2]&&null
1. 1||[1,2]&&null
2. 1||null
3. 1
运算符的优先级 https://blog.csdn.net/jianleking/article/details/78017221