javascript - 作为本练习的解决方案,这两个循环之间的主要区别是什么? (学习javascript)

标签 javascript loops while-loop do-while

我正在学习 JS 并遇到了这个练习:

Write a loop which prompts for a number greater than 100. If the visitor enters another number – ask them to input again.

The loop must ask for a number until either the visitor enters a number greater than 100 or cancels the input/enters an empty line.

Here we can assume that the visitor only inputs numbers. There’s no need to implement a special handling for a non-numeric input in this task.

我的解决方案有效,如下:

let value;
while (true)    {
    value = prompt('Enter a number greater than 100', 0);
    if (value > 100 || value === '');
    console.log(value);
    break;
} 

MDN 的解决方案是这样的,虽然它更短、更简单,但它似乎完成了相同的任务。

let num;

do {
  num = prompt("Enter a number greater than 100?", 0);
} while (num <= 100 && num);

我的解决方案仍然有效吗? MDN 是否更合适?

我只是想确保我在做的过程中正确理解了事情。

最佳答案

如果您的解决方案之前有效,我认为您可能在此处输入了错误的解决方案。我假设你的意思是写:

 if (value > 100 || value === '') {
    console.log(value);
    break;
 }

由于您刚刚开始使用 JS,因此您最终将了解到可以通过多种方法来处理任何给定的编码问题。它并不总是一个好的答案/错误的答案类型的场景。有时有多种方法可以完成同一件事。

在此示例中,MSN 解决方案在可读性和可能的​​安全性方面更好。

MSN 解决方案创建一个 while 循环,并在 while 语句中标识退出条件。当满足该条件时,此循环退出。

在您的解决方案中,循环永远不会自行退出,while() 语句的计算结果将始终为“true”。该循环需要显式的 exit 语句,您可以通过 if() 条件提供该语句。

您的方法虽然有效,但在代码可读性和整体维护配置文件方面有点不太安全。例如, future 的开发人员可能会错误地更改 if() 条件并无意中创建永无止境的循环。

或者,如果循环包含几十行代码,开发人员可能会错过 if 条件,并可能在 if 条件后面添加一些重要的代码(这些代码在满足退出条件时不会执行。)

是的,这个特定的示例练习很简单,因此代码的复杂性和可读性可能并不重要。但在具有数百行代码的大型企业应用程序中,此类代码选择会带来严重的风险和代价高昂的影响。

也就是说,我要重申一下 - 当您了解更多关于 JS 的知识时,您经常会发现有多种方法可以解决任何给定的问题。有时您确实希望通过 if() 语句创建显式退出条件,但在极少数情况下您会希望创建一个永不结束的循环。

当您探索更复杂的问题时,您会发现需要此类解决方案。因此,不断学习,不断尝试不同的解决方案,并不断提出问题。

关于javascript - 作为本练习的解决方案,这两个循环之间的主要区别是什么? (学习javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59447864/

相关文章:

javascript - 如何在 Nest js 中遍历 @Query() 对象

javascript - 我可以使用新的 ZeroClipboard 从剪贴板获取数据吗?

javascript - 更改 anchor 处的滚动方向

javascript - $http angularJS 循环每个带有传单问题的对象

Python for循环从2开始到10然后覆盖0和1

java - 我如何返回到之前的菜单?

c# - C#游戏中While循环崩溃

java - 创建当用户输入 "0"时停止的数组

c - 我不知道如何仅在某些情况下打印句子

c++ - 同样的for循环在其他项目中有效,但在本项目中无效。为什么?