逗号运算符
逗号运算符是二元运算符,它的操作数可以是任意类型。它首先计算左操作数,然后计算右操作数,最后返回右操作数的值,用逗号运算符可以在一条语句中执行多个运算
作用:
1.在一条语句中从左到右执行多个运算
2.返回右边最后一个值作为表达式的结果(经常被忽略但是却很重要的特性)
(i = 0), (j = 1), (k = 2);
//计算结果是2,它和下面的代码基本等价
i = 0;
j = 1;
k = 2;
console.log(((i = 1), (j = 2), (k = 3))); //计算结果为2
应用场景:
1.同时声明多个变量
var iNum1 = 1,
iNum = 2,
iNum3 = 3;
2.for 循环中三部分有多个变量时,使用,分割
var k;
for (var i = 0, j = 0; i < 6, j < 10; i++, j++) {
k = i + j;
}
console.log(k);
来一道醍醐灌顶的面试题:
var k;
for (var i = 0, j = 0; i < 6, j < 10; i++, j++) {
k = i + j;
}
console.log(k); //k=?
结果推测:
- k=10
解析:
因为 i=6 时,不满足条件,跳出循环。(关系间为&&关系) - k=12
基础原因考虑到 1,然后推测 k=i+j 是引用函数中的 i、j 所以当 log(k)的时候,应该输出 i、j 循坏结束后的值即 i=j=6(闭包后遗症) - k=18
因为 i < 6, j < 10 是或的关系,需要两者同时值为 false - k=18
逗号运算符从左到右依次计算每个操作符,最终结果由最右的操作数决定,j<10 才为中止条件。
输出答案:
console.log(k); //k=18
3、4 推测验证:
var k;
for (var i = 0, j = 0; i < 6, j < 10, 2 < 1; i++, j++) {
k = i + j;
}
console.log(k);
验证分析:
1.逗号分隔的是或的关系,那么需要所有表达式都为false,结果依然为18
2.逗号分隔为运算符,那么条件判断最终结果为最右表达式2<1,那么将不进入循环,直接输出undefiend
验证结果:
console.log(k);//k=undefined
结果分析,最终输出k=undefined,for中的判断表示式使用逗号分隔时,遵循逗号运算符的基本规则,最终结果由最右的操作数决定