我正在学习 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/