# 其他运算符、运算顺序
# void 运算符
void运算符的作用是执行一个表达式,然后不返回任何值,或者说返回undefined。
void 0 // undefined
void(0) // undefined
var x = 3;
void (x = 5) //undefined
x // 5
1
2
3
4
5
6
2
3
4
5
6
用户点击链接提交表单,但是不产生页面跳转。
<a href="javascript: void(document.form.submit())">
提交
</a>
1
2
3
2
3
# 逗号运算符
逗号运算符用于对两个表达式求值,并返回后一个表达式的值。
'a', 'b' // "b"
var x = 0;
var y = (x++, 10);
x // 1
y // 10
1
2
3
4
5
6
2
3
4
5
6
逗号运算符的一个用途是,在返回一个值之前,进行一些辅助操作。
var value = (console.log('Hi!'), true);
// Hi!
value // true
1
2
3
4
2
3
4
# 运算顺序
# 1.优先级
乘法运算符(*)的优先性高于加法运算符(+),所以先执行乘法,再执行加法。
4 + 5 * 6 // 34
4 + (5 * 6) // 34
1
2
3
2
3
# 2. 圆括号
圆括号(())可以用来提高运算的优先级,因为它的优先级是最高的,即圆括号中的表达式会第一个运算。
(4 + 5) * 6 // 54
1
函数放在圆括号中,会返回函数本身。如果圆括号紧跟在函数的后面,就表示调用函数。
function f() {
return 1;
}
(f) // function f(){return 1;}
f() // 1
1
2
3
4
5
6
2
3
4
5
6
圆括号之中,只能放置表达式,如果将语句放在圆括号之中,就会报错。
(var a = 1)
// SyntaxError: Unexpected token var
左结合与右结合
1
2
3
2
3
# 3. 左结合与右结合
对于优先级别相同的运算符,大多数情况,计算顺序总是从左到右,这叫做运算符的“左结合”(left-to-right associativity),即从左边开始计算。
x + y + z
1
但是少数运算符的计算顺序是从右到左,即从右边开始计算,这叫做运算符的“右结合”(right-to-left associativity)。其中,最主要的是赋值运算符(=)和三元条件运算符(?:)。
w = x = y = z;
q = a ? b : c ? d : e ? f : g;
上面代码的运算结果,相当于下面的样子。
w = (x = (y = z));
q = a ? b : (c ? d : (e ? f : g));
1
2
3
4
5
6
7
2
3
4
5
6
7
指数运算符(**)也是右结合的。
// 相当于 2 ** (3 ** 2)
2 ** 3 ** 2
// 512
1
2
3
2
3