1,操作符,是操作数据值的符号
一元操作符
位操作符
布尔操作符
四则运算操作符
关系操作符
条件操作符
赋值操作符
逗号操作符
2,一元操作符
只能操作一个值的操作符
递增:++
递减:--
前置:立即计算
后置:本行代码执行完成之后才进行计算操作
递增和递减操作会对不同类型的值有影响,先通过Number() 函数转换后再进行计算操作
一元加:+ 不会对变量有影响
一元减:- 会去取对应的变量的反数
一元加减在对非数字类型的值操作的时候,先通过Number() 函数转换之后在进行操作,对于复杂类型数据 Object ,会通过valueOf() 和 toString()方法之后再进行操作
3,一元位操作符
对内存中二进制数进行操作
4,逻辑与:&&
当两个操作对象都为 true 的时候 才返回 true
用逻辑与不一定会返回布尔值结果
如果前一个操作对象是一个对象 var obj={} 的话,那么直接返回第二个操作对象
如果后一个操作对象是一个对象 var obj={} 的话,那么如果前一个操作对象 通过 Boolean() 函数转换之后返回了false 的话 就直接返回前一个操作对象
如果前一个操作对象通过 Boolean() 转换之后返回的是 true 的话 ,就会返回后面的操作对象obj
var obj={}; 通过 Boolean() 函数返回的是true 所以如果前后两个操作对象都是 Object 类型的话 直接返回第二个对象
如果有一个操作对象是 null 直接返回 null 不管是在什么位置的 null
如果有一个操作对象是 NaN 直接返回NaN
如果有一个操作对象是 undefined 直接返回 undefined
5,逻辑或:||
只有当两个操作对象都是 false 的时候,才会返回false ,其它情况都返回 true
同样,不一定返回布尔值结果
如果第一个操作对象是 Object {} 的话,直接返回这个对象
如果有一个操作对象是 undefined 或者 NaN 的话,返回原值,可以用这个方法来设置默认值
6,短路逻辑
逻辑与 逻辑或 都是短路逻辑
当第一个操作对象为 true 的时候 逻辑与 不再执行
当第一个操作对象是 false 的时候 逻辑或 不再执行
7,逻辑非:!
返回布尔值
如果对非布尔值使用,先通过 Boolean() 函数转换之后再操作
8,乘法:*
数字运算结果要在范围内,否则返回 Infinity 或者 -Infinity
和 NaN 相乘返回 NaN
非数字类型的值 通过 Number() 转换之后再运算
Infinity 和 0 相乘返回 NaN
9,除法:/
Infinity/Infinity 返回 NaN
其它操作和乘法类似,先通过 Number() 函数转换之后再运算
0/0 也是 NaN
Infinity/正数 是 Infinity
Infinity/负数 是 -Infinity
10,模运算:%
就是取余数 处理方法和除法类似
11,加法:+
数字相加
字符串相加相当于把 两个字符串拼接
字符串和一个变量相加 会把变量执行String() 方法后在相加
12,减法:-
会通过Number() 后操作
13,关系操作符:> ,<, >=, <=
返回布尔值
数字的话,比大小
字符串的话,逐个字符比较asc码
如果是对象比较的话,先调用对象的valueOf()方法再比较,如果没有valueOf() 方法的话,就调用toString() 方法,之后再比较
布尔值的话,Number() 转成数字再比较
14,相等与全等:== === != !===
全等比较值和类型
普通等是在类型转换之后再比较值
对象之后指向同一个对象的时候才会相等
15,唯一的三元操作符:?:;
对? 左侧表达式进行操作,true的话返回 :左边的值 ,false 的话 返回 :右边的值
16,赋值操作符:+= -= *= /= %=
17,位操作符的赋值操作:<<= >>= >>>=
18,逗号操作符:,
用于在一行语句中执行多个操作
还可以用来赋值,返回最后一个操作的值