javascript - 第一次迭代后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)
}
}
解决方案
您的线路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();