类别 |
操作符 |
|
算术操作符 | +、 –、 *、 /、 %(取模) | |
字符串操作符 | + 字符串连接 +=字符串连接复合 | |
布尔操作符 | !、 &&、 || | |
一元操作符 | ++ 、 -- 、 +(一元加)、 -(一元减) | |
关系比较操作符 | < 、 <= 、 > 、>=、 != 、 == 、 === 、 !== | |
按位操作符 | ~ 按位非 &按位与 | 按位或 ^按位异或 <<左移 >>有符号右移 >>>无符号右移 | |
赋值操作符 | = 、 复合赋值(+=、-=、*=、%=) 复合按位赋值(~=、&=、|=、^=、<<=、>>=、>>>=) | |
对象操作符 | .属性访问、[]属性或数组访问、 new调用构造函数常见对象、delete变量属性删除、void(返回undefined)、in判断属性、instanceof原型判断 | |
其它操作符 | ?: 条件操作符、,逗号操作符、()分组操作、typeof类型操作符 |
一个表达式叫操作,两个及以上叫运算。
JavaScript中的大多数运算符是一个二元运算符(binary operator),将两个表达式合并成为一个稍复杂的表达式。譬如a*b中的乘法运算符*,就是一个二元运算符。表达式-x中的-运算符就是一个一元运算符,是将操作数x求负值。最后,JavaScript支持一个三元运算符(ternary operator),条件判断运算符?:,它将三个表达式合并成一个表达式。
这次想写下一元操作符 + -
上题 :
a = 1 'a' + + 'b' a +++ a a ++ + ++ a
a ++ 'b' ==>a + +'b';+'b' 会进行一元加操作相当于 Number('b'),将表达式转换成数字。即 aNaN)(要注意+ +中间空格)
a +++ a==>a++ + a; ,++一元操作符优先级高于算数操作符 + ,a++运算之后加1,所以当前a为1,后一个a为2。即 3
a ++ + ++ a==>和上一个相似。结果为6
这里想弄明白原因必须要知道优先级、结合性、运算顺序
优先级:属性访问 > 一元操作符 > 乘除 > 加减 > 比较 > 相等 > 与运算 > 或运算 > 三目运算 > 赋值运算>逗号(不参与运算)
结合性(左、右结合):一行代码中存在多个运算符,且这些运算符的优先级相等。所有一元操作符、三目运算符和赋值运算符都是右结合,其他的操作符都是左结合
x = a ? b : c ? d : e ? f : g;==> x = a ? b : (c ? d : (e ? f : g));
运算顺序:表达式里还包含表达式从左向右运行。例如 a +++ a ==》((a++) + a )
注意:++ 和 + + 区别很大;连续 + 不能超过3个;++不能操作数字;数字 + NaN = NaN