\ue50a703　\ue50b\ue50a发布于　\ue50b\ue50a2018-03-20　\ue50b比方说下面这段代码:　var　arr　=　[0,1,2,3,4,5]for　(var　i　=　0;　i　[1,2,3,4,5]　当i=1时,进入if,数组变为[1,5,3,4,5],执行删除——>[1,3,4,5]　当i=2时,进入if,数组变为[1,3,5,5],执行删除——>[1,3,5]　当i=3时,此时数组长度仅为3,跳出循环,得到最终结果　赞5赋值语句的返回值是被赋的值本身。　也就是说你第一段代码的　if　进不去是因为都是　if(0)　,第二次都是　if(5)　所以就进去了　我们经常会这样利用这个特性:　var　a5　=　a[5]　||　(a[5]　=　100)//　取a的5号位,如果没有值(或者　falsey),为它赋值并取它的值　聪明如你应该一下就能看懂　注意一个区别,　变量声明语句　没有返回值,这解释你最后一段的倒数第二行代码　简单的验证:　var　a　=　1　//　undefineda　=　2　//　2　希望对你有帮助　赞　我找到答案了!　一、首先说　if(arr[i]　=　0)　的情况,这里也用上面类似的小demo演示:　var　a　=　1　//undefinedBoolean(a　=　0)　//false　看到了吗,此时if语句的条件最终的结果是false,也就是说每次循环都执行了if语句里面的赋值,但是条件不符合,所以if语句里面的代码块没有执行,结果就是6个0。　二、再说说　if(arr[i]　=　8)　的情况:　第一次循环,i=0,if语句括号里面赋值后结果是true,所以执行条件体,删除数组第0项,　此时的数组是[1,2,3,4,5]　第二次循环,i=1,if语句括号里面赋值后结果是true,所以执行条件体,删除数组第1项,　此时的数组是[1,3,4,5]　第三次循环,i=2,if语句括号里面赋值后结果是true,所以执行条件体,删除数组第2项,　此时的数组是[1,3,5]　第四次循环的时候,i=4,而此时数组长度为3,条件不符合,循环结束。　这样就缕清楚了!　赞　第一段代码对数组进行了赋值操作　第二段代码对数组进行删除元素操作,结果:[　1,　3,　5　]　是删除后剩下的元素　希望能帮到你　赞　其实这个都是因为赋值表达式的值是赋值表达式右值。　所以你第一段代码中的　if(arr[i]