当发生这种情况时,我正在尝试创建自定义的 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)
}
}
答案 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();