美文网首页
逗号表达式

逗号表达式

作者: 就那ck | 来源:发表于2017-03-10 16:42 被阅读0次

    初遇js逗号表达式

    初次碰到逗号表达式,是在一次面试中的一道笔试题:

    var i=0,j=0,k=0;
    for(;i<6,j<10;i++,j++){
      k = i + j;
    }
    console.log(k);
    

    一眼望去,就是个for循环啊,仔细一看,怎么有两个参数?有点蒙逼的感觉。。。
    我想js可以单行声明变量,如下:

    var i=0,j=0,k=0;
    

    每个变量都能正常声明,说明逗号前后的表达式都可以执行,也互不影响。那这个for循环中的i++和j++应该也是也互不影响?但是for循环是由哪个变量来控制啊,是由i<6还是由j<10?
    思来想去,最终也是没能给出正确答案。。。

    什么是js逗号表达式?

    面试结束后,赶紧去网上查资料,原来这种方式叫逗号表达式,它的特点是逗号前后的表达式都会执行,并且把最后一个逗号后的表达式的值返回给整个表达式。先来个简单的例子:

    console.log((1,2,3));//3
    

    结果可以看到打印的是3,也就是说表达式(1,2,3)返回的是最后一个逗号后面的值。
    再来一个稍微复杂点的例子:

    console.log((b=4,c=10+b,b*5));//20
    console.log(c);//14
    

    这个例子第一个会打印出20,这是因为返回了b*5,而b=4,所以会打印出20,第二个会打印出14,表示逗号表达式的每个被逗号隔开的表达式都会执行,而c=10+b,所以打印结果是14。

    for循环最终打印出多少?

    再回到刚才那个for循环,i<6,j<10这也是一个逗号表达式,for循环的循环条件取决于这个逗号表达式所返回的值,而根据之前所说,会返回最后一个逗号后的表达式的值作为整个逗号表达式的值。因此,当j<10的时候,会返回true,for循环会一直进行下去,当j>=10,会返回fasle,整个for循环会结束。

    后面的i++,j++,也是一个逗号表达式,每次循环i和j都会分别执行,自加1。直到j=10的时候,for循环停止,此时内部的i和j都自加到了9,因此k=9+9;结果会打印出18。

    如果改变一下for循环条件位置,如下:

    var i=0,j=0,k=0;
    for(;j<10,i<6;i++,j++){
      k = i + j;
    }
    console.log(k);
    

    这样会打印出多少呢?

    相关文章

      网友评论

          本文标题:逗号表达式

          本文链接:https://www.haomeiwen.com/subject/qrzngttx.html