关于for循环的一小段代码
发布于 9 年前 作者 clm1100 5293 次浏览 最后一次编辑是 8 年前 来自 问答
var arr = [1, 2, 3];
     for (var i = 0, j; j = arr[i++];) {
         console.log(j);
     }

这段代码的循环条件是什么,看不出来,希望知道的人帮忙解决一下啊

16 回复

我也看不懂了,求大神来解释 =.=

语句 1 在循环(代码块)开始前执行(可选) 语句 2 定义运行循环(代码块)的条件(可选) 语句 3 在循环(代码块)已被执行之后执行(可选)

答案就是 j = arr[i++] = > j == true

查询js文档发现 语句1,语句2 ,语句3,都是可以省略的;这段代码是省略了那一块呢,语句2和语句3合并了?

var arr = [1, 2, 3];
     for (var i = 0, j; j = arr[i++];) {
         console.log(j);
     }
console.log(i); // 4

i变量到了4,剔除掉i++,说明循环最后的判断语句为j=arr[3],arr[3]为undefined,然后j=undefined也返回undefined

比如下面的循环永远也进不去

var j;
while(j=undefined){
        $.writeln("never been here")
    }

考的是undefined作为判断条件会被认为是false吧.

不过这写法真溜,不用length不用try{}catch(){}就把数组遍历完了,不知道效率如何?

是这么回事没错,但是谁写这样的代码我烧死他 自豪地采用 CNodeJS ionic

@captainblue2013 唉,在一个公众号看的,我也想烧死他

@Smallpath 顶啊,正解,感谢感谢

确实有点蹩脚,不晓得这么写有优势吗

省了点调用方法,但是不要让我看到联调的时候看到这段代码,信不信删数据库跑路? From Noder

从精简代码的角度考虑不如来个 _.each() 呢 :)

这是存在感判断法= =。

@captainblue2013 来啊,烧我!我在三元语法里经常写这种莫名其妙的东西- -

看高手的代码,就像看了一本福尔摩斯侦探小说一样。 做项目不需要高手,能做好就行。

@MiguelValentine 存在感判断法,存在感…, 2.jpg

回到顶部