首页 > 解决方案 > 第一次迭代后while循环停止

问题描述

发生这种情况时,我正在尝试创建自定义 while 循环。whileloop 在到达 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)
     } 
}

标签: javascriptarraysif-statementwhile-loop

解决方案


您的线路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();


推荐阅读