【问题标题】:conditional expression in while-loop does not work as expectedwhile循环中的条件表达式不能按预期工作
【发布时间】:2019-07-09 11:04:06
【问题描述】:

我对我的 while 循环进行条件测试,但它似乎不起作用。 我认为这是因为增量运算符。但我找不到原因

const nums = [3, 5, 15, 7, 5];
let n, i = 0;
while ((n = nums[i]) < 10, i++ < nums.length) {
  console.log(`Number less than 10: ${n}.`);
  };

预计 [3, 5, 7, 5]
实际结果 [3, 5, 15, 7, 5]
我不知道为什么 15 出来了。

我想知道为什么while循环会这样工作。

更新:

这个问题来自“learning javascript 3rd”一书 , 逗号操作符并没有像我想象的那样工作。

【问题讨论】:

  • 逗号运算符并没有按照您的想法执行。您指的是逻辑“与”运算符 (&amp;&amp;) 吗?
  • 当我用 && 代替时,它只给了我 3 和 5..
  • 因为 while 循环在 15 处停止,因为您要求它这样做
  • 非常感谢你帮了我很多忙!!

标签: javascript while-loop expression increment


【解决方案1】:

如果将 , 改正为 &&,则当你到达 15 时,while 是捷径

逗号运算符返回i++ &lt; nums.length的结果

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator

你真的很想研究 ES5/ES6 和过滤器

let smallNums = [3, 5, 15, 7, 5].filter((n) => n<10)
console.log(smallNums)

同样没有 ES6 箭头:

let smallNums = [3, 5, 15, 7, 5].filter(function(n) { return n<10; })
console.log(smallNums)

【讨论】:

  • !!逗号操作符返回i++的结果
  • 澄清一下,.filter 在 ES5 中。箭头函数是 ES6 的(但是如果你必须支持像 IE 这样的非常老的浏览器,可以很容易地被一个普通的匿名函数声明替换)。
  • @RobinZigmond 更新
【解决方案2】:

这里。您应该在 while 循环中创建一个条件,因为如果条件为假,则整个循环将被终止。

const nums = [3, 5, 15, 7, 5];
let n, i = 0;
while (i < nums.length) {
  if ((n = nums[i++]) < 10) {
    console.log(`Number less than 10: ${n}.`);
  }
};

【讨论】:

  • 非常感谢!你能告诉我我的代码是如何工作的吗???我不知道为什么条件表达式不能捕捉到超过 10 的数字
  • 注意:您需要在 if 语句中添加 break 以获得与 while 循环条件相同的行为
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2014-10-21
  • 2013-09-28
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 2022-11-02
相关资源
最近更新 更多