【问题标题】:How to explain the following JavaScript code? Why the for loop can stop automatically?如何解释以下 JavaScript 代码?为什么for循环会自动停止?
【发布时间】:2020-10-15 01:50:11
【问题描述】:

如何解释下面的 JavaScript 代码?为什么for循环会自动停止?

for (let i = 5; i--; ) {
  for (let j = 3; j--; ) {
    console.log(i, j);
  }
}
// 4 2
// 4 1
// 4 0
// 3 2
// 3 1
// 3 0
// 2 2
// 2 1
// 2 0
// 1 2
// 1 1
// 1 0
// 0 2
// 0 1
// 0 0

for (let i = 0; i--; ) {
  for (let j = 3; j--; ) {
    console.log(i, j);
  }
}
// No output

for (let i = false; i--; ) {
  for (let j = 3; j--; ) {
    console.log(i, j);
  }
}
// No output

似乎当i 为假时,for 循环将自动停止。我认为只有当i-- 为假时,for 循环才会停止。

【问题讨论】:

    标签: javascript for-loop


    【解决方案1】:

    如果 i 以 0 开头,i-- 将是错误的,因为后增量采用变量的 当前 值并递减变量。当i 从 0 开始时,i-- 为 0:

    let i = 0;
    console.log(i--);

    for (let i = false; i--; ) { 也发生了同样的事情——ifalse 而不是 0 开头的事实仍然使它成为错误:

    let i = false;
    console.log(i--);

    因此不会发生迭代。

    【讨论】:

      【解决方案2】:

      根据W3Schools的定义,for参数是可选的。

      • 第一个在启动循环之前执行。
      • 第二个是条件,当这个条件返回真时,for循环继续。
      • 最后一个执行结束每个循环。

      现在,让我们来看看例子:

      for (let i = 5; i--; )
      

      在这种情况下,第一条语句将i 初始化为5。第二条语句评估i-- 是否等于真。而且我们没有第三个声明。

      循环结束,因为i 将是 0,它被强制转换为 false,但为什么它打印 0?嗯,这是因为在后递减中,变量的值首先被评估,然后再进行递减,(你可以查看后递增和前递增的解释here

      现在,在下面的例子中

      for (let i = 0; i--; )
      for (let i = false; i--; )
      

      seconds 语句将始终返回 false,这会中断 for 循环。请记住,false 在尝试 false-- 时将强制为 0

      【讨论】:

        猜你喜欢
        • 2020-01-13
        • 1970-01-01
        • 2021-04-16
        • 2022-12-06
        • 2015-02-12
        • 2018-10-02
        • 1970-01-01
        相关资源
        最近更新 更多