Arity
- Unary: accepts one single expression. e.g. -x
- Binary: accepts exactly 2 expressions. e.g. a*b
- Ternary: combines 3 expressions into 1 expression, only one. i.e. ?: -- conditional operator
lval: 等号左边的variable. e.g. variables, object properties, array elements.
Arithmetic Operator
- Basics: + - * /
- /: all divisions have floating-point results
- 0/0 results in NaN
- Modulo: %
- Returns remainder
- 5%2 = 1
- -5%2 = -1
- also works for floating-point
- Exponental: **
- e.g. 2**8: 2 to the power of 8
- Math.pow() also works
Note: NaN operand always result in NaN result
The binary '+' type conversion
- 有string-like的时候自动转string,return合并后的string
- 没有string-like的时候做纯数学加法
- 有object的时候自动转primitive
- Date用toString()
- 其他object用valueOf()或者toString()
- 转完primitive后有string,return合并后的string
- 转完primitive后只有numbers,做纯数学加法
Note: 依然需要按顺序从左到右evaluate,此规律仅判断一个➕运算结果
1 + 2 + “something” // 3something
1 + (2+“something”)// 12something
Unary Arithmatic Operators
- +x: converts 'x' to a number, or NaN
- -x: converts 'x' to a number, or NaN, then flip the sign
- ++x: adds 1 to x, use new value to do the rest of the evaluation
- x++: adds 1 to x, use old value to do the rest of the evaluation
- --x: subtracts 1 from x, use new value to do the rest of the evaluation
- x--: subtracts 1 from x, use old value to do the rest of the evaluation
Bitwise Operators
- Bitwise AND (&): Boolean AND operation on each bit
- Bitwise OR (|): Boolean OR operation on each bit
- Bitwise XOR (^): Boolean exclusive OR operation on each bit. i.e. either bit is true, but not both
- Bitwise NOT (~): Reversing all bits. i.e. flipping sign and subtracting 1
- Left shift (<<)
- Right shift with sign (>>)
- Right shift with zero fill (>>>)