问答详情
源自:5-1 性能优化

balls[cnt++]=balls[i]的详细解释或其它例子

var cnt=0
for(var i=0;i<balls.length;i++){
    if(balls[i].x+radius>0&&balls[i].x-radius<canvasWidth){
        balls[cnt++]=balls[i];
    }
}

我知道老师的解释是,小球数组中的第0个到cnt-1个是在canvas画布中,可是这种数组的赋值怎么解释呢?就是balls[cnt++]=balls[i]这种数组赋值方式

提问者:标标哟 2017-03-08 14:04

个回答

  • qq_春花花_0
    2017-04-04 14:27:37
    已采纳

    ++i与i++不在赋值运算中的话,应该是相同的,都是自增,没有运算前运算后

  • 王王王正中
    2017-09-19 21:39:45

    假设屏幕中有5个小球①②③④⑤,第五个小球在屏幕内,故有


    balls[0] ☓    不符合if语句

    balls[1] ☓    不符合if语句

    balls[2] ☓    不符合if语句

    balls[3] ☓    不符合if语句

    balls[4] √     符合if语句

    故有balls[0] = balls[4]

    现在数组的样子就为⑤②③④⑤,还是有5个元素。但是我们想做的是将屏幕之外的另外4个小球都删除,只剩下一个元素。即使第5个小球(balls[4])是在屏幕内的,但是它已经复制给了balls[0],覆盖了第一个元素,所以,只要将balls[0]之后的元素全部删除就可以了。

    让我们来执行

    while(balls.length > cnt)     balls.pop();

    balls.length = 5 cnt = 0

    5 > 0 pop()

    balls.length = 4 cnt = 0

    4>0 pop()

    balls.length = 3 cnt = 0

    3>0 pop()

    balls.length = 2 cnt = 0

    2>0 pop()

    balls.length = 1 cnt = 0

    1>0 pop()

    0 不大于 0 循环结束。我们的数组中只剩一个在屏幕里的小球,其他的都被删除了。

    不知道我的理解是否有差错,希望可以帮助您。


  • qq_春花花_0
    2017-04-04 14:29:53

    看了你的博客后,把我给绕晕了,看了很久都没看明白

  • 标标哟
    2017-03-11 14:10:07

    自己强答一波,相关思路我发到自己的博客了╮(╯▽╰)╭,大家可以看看

    http://icke.site/2017/03/10/20170310-JavaScript-arr[i++]/