While 循环在第一次迭代后停止

时间:2021-04-26 12:48:46

标签: javascript arrays if-statement while-loop

当发生这种情况时,我正在尝试创建自定义的 while 循环。 while 循环在到达 if 语句后自行停止。当表达式中 x 的值与 x 的当前值匹配时,If 语句的条件似乎是执行自身。为什么会发生这种情况?有没有其他方法可以做到这一点?

 function test () {
    var x = [0,1,2,3,4,5];
    while (x.length > 0) {

        console.log(x[0]);
        console.log(x.length)

        if (x.length = 0) {
            x = [0,1,2,3,4,5]
           }
        console.log(x[0]);

        console.log(x.length)

        x.splice(0,1)
     } 
}

1 个答案:

答案 0 :(得分:0)

您的行 if (x.length = 0) 实际上并未检查长度。因为您只使用一个等号 (=) 而不是两个 (==) 或三个 (===),您实际上是将 0 分配给该数组的长度属性,从而删除数组中的所有元素。第一次迭代后,条件为假,因为你的数组中将没有属性,所以长度不再大于零。

以下是您的功能,已更正。我还在最后两个控制台日志之前移动了 splice() 语句,以便这些日志显示拼接后的内容,而不是前两个控制台日志。这样,您的日志将在最终迭代结束时将长度显示为零。

function test() {
    var x = [0, 1, 2, 3, 4, 5];
    while (x.length > 0) {
        console.log(`x[0]: ${x[0]}`);
        console.log(`x.length: ${x.length}`);
        if (x.length === 0) {
            x = [0, 1, 2, 3, 4, 5];
        }
        x.splice(0, 1);
        console.log(`x[0]: ${x[0]}`);
        console.log(`x.length: ${x.length}`);
    }
}
test();