逗号运算符

 

首先看个例子

 var i,j,k;
 for( i = 0 , j = 0; i < 10 , j < 6; i++ , j++ ) {
        k = i+j;
        console.log('i='+i+',j='+j+',k的结果是:'+k);
 }

控制台结果是:

对上面的例子做一下修改

 var i,j,k;
 for( i = 0 , j = 0; i < 2 , j < 5; i++ , j++ ) {
        k = i+j;
		console.log('i='+i+',j='+j+',k的结果是:'+k);
 }

控制台结果如下:

是不是有些疑惑?主要是因为逗号运算符。

 

逗号运算符

作用:将若干表达式连接起来。

特点:优先级别在所有运算符中是最低的,结合方向是"自左至右"的

 

逗号表达式

一般形式:表达式1,表达式2,表达式3……表达式n 

求解过程:先计算表达式1的值,再计算表达式2的值,……一直计算到表达式n的值。最后整个逗号表达式的值是表达式n的值。

 

举个例子

x = 8*2, x*4  // 整个表达式的值为64, x的值为16

现在你应该明白上面的前两个例子的执行结果了吧。i<10, j<6; 只要满足 j<6 就继续for循环,否则退出循环。i<2, j<5; 只要满足 j<5 (即使可能不满足i<2)就继续for循环,否则退出循环。

 

再来看逗号运算符与函数运算符相冲突的例子

alert(2,5);  //2
alert((2,5)); //5

由于逗号运算符在 JavaScript 运算符的优先级是最低的,函数运算符先于逗号运算符运行,因此第一个alert函数弹出2。第二个alert函数,加上括号后保证了逗号运算符先运行,因此弹出5。

 

逗号运算符和赋值运算符冲突

var a = 20;
var b = ++a, 10;  // 报错
console.log(b);

上述代码会报错

由于逗号运算符要求它的运算数为复杂表达式或简单表达式(如变量或直接量),赋值运算符先于逗号运算符执行,使逗号运算符左边不是一个运算数或表达式,而是含有var关键字的语句,因此报错。

解决方法:只需加上括号,即 var b = (++a, 10),保证逗号运算符先执行即可。

 

再看几个示例:

console.log((0, 9)); //9
console.log((9, 0)); //0
if ((9, 0)) console.log("no"); // 没有打印
if ((0, 9)) console.log("yes"); //yes

交换变量,无需第三个变量

var a = 'a', b = 'b';
//method1
a = [b,b=a][0];
//method2
a = [b][b=a,0];

简化代码,但是可读性差

if(x) {
    foo();
    return bar();
} else {
    return 1;
}
// equal to 
return x ? (foo(), bar()) : 1;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值