Javascript do/while循环显示意外结果
Javascript do / while loop displays unexpected result
有人能帮我理解为什么下面的问题会发生在下面的excersise上吗?
循环应该以5为增量向上和向下计数,并带有一个文本字符串。除了do/while循环不包括带有最终数字的文本字符串之外,这三个循环都能工作。它只是说"50"而不是"数字50"。
for (x=1; x<50; x+=5) {
console.log("The number " + x);
}
var y = 50
while (y>1) {
console.log("The number " + y);
y-=5;
}
var z = 0;
do {
console.log("The number " + z);
z+=5;
}
while(z<50);
它们都不包含;他们都没能输出最后一个数字
重要信息:此错误与使用do-while
与while
或for
无关。您没有注意到其他变量的原因是一个变量的最后一个值与下一个的第一个值重叠
如果您还记录了实际打印的变量,您会看到这一点。
console.log('x: ');
for (x=1; x<50; x+=5) {
console.log("The number x " + x);
}
console.log('y: ');
var y = 50
while (y>1) {
console.log("The number y " + y);
y-=5;
}
console.log('z: ');
var z = 0;
do {
console.log("The number z " + z);
z+=5;
}
while(z<50);
您不打印最后一个数字的原因是您在打印后递增/递减。
考虑以下循环:
var i = 0;
while(i < 5){
console.log(i);
i++;
}
当i
为4时,会发生以下情况:
- 日志
i
(4) - 增量
i
(现在为5) - 是
i < 5
吗错误 - <退出循环>
如您所见,i
达到最后一个数字,但一旦达到,就不会打印出来。这个问题的一个简单解决方案是将<
切换为<=
,以使循环具有包容性。
当然,在您的情况下不应该显示"数字50":
...
console.log("The number " + z) // z == 45
z+=5 // z == 50
}
while (z<50); // no, exit from cycle
...
do-while
语句定义为(emphasis mine):
生产
do
语句while
(
表达式);
为评估如下:
- 设V=空
- 设迭代为真
- 重复,而迭代为true
- 设stmt是评估语句的结果
- 如果stmt.value不为空,则设V=tmt.value
- 如果stmt.type未继续||tmt.target不在当前标签集中,则
- 如果stmt.type为break,且tmt.target在当前标签集中,则返回(normal,V,空)
- 如果stmt是突然完成,则返回stmt
- 设exprRef是评估表达式的结果
- 如果ToBoolean(GetValue(exprRef))为false,则将迭代设置为false
- 返回(正常,V,空)
因此,do-while
语句的求值返回V,即它内部最后一个求值语句的值。
在这种情况下,是50。如果您在控制台中运行代码,控制台将显示代码返回的值,因此您将看到50。
如果你在一个页面上运行它,你不会看到50。
相关文章:
- 从桌面读取python文件时高亮显示代码
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何在生成下载文件时显示加载动画
- NodeJS中的Parse Json文件在Node中显示意外结果
- Javascript do/while循环显示意外结果
- 代码显示意外行为
- 跨 ajax 请求到服务器返回的 json 对象显示错误意外令牌:
- 画布显示意外的颜色,并且不会显示反转的图像
- cakephp调试信息意外显示
- winjs:当显示页面时,会自动显示意外的字符串
- 使用Angular.js和UI Router突出显示菜单时出现意外类
- 嵌套循环中出现意外中断;t显示在调试器中
- 无法显示数据.SyntaxError:JSON.parse:JSON数据的第1行第1列出现意外字符
- react本机选项卡导航器npm模块在静态proptype中显示意外的令牌
- 硒IDE-显示意外警报!生成随机电子邮件ID时
- 意外的标记,.asp值显示为未定义
- eval(element.innerHTML)显示意外的语法错误
- indexOf()显示意外值
- 正在比较显示意外结果的日期对象
- 当鼠标离开SVG空间时,在鼠标上方突出显示节点会导致意外行为