与simple for loop-javascript混淆

与simple for loop-javascript混淆,javascript,for-loop,Javascript,For Loop,我已经做过几次了,但从来没有遇到过这个问题。也许,这是关于for循环的一些基本问题,我不理解。出于某种原因,下面的代码比它应该运行的时间长10倍(好吧,比我认为的要长)。如果用户输入20,则运行到200。我通过设置I=0解决了这个问题;我

我已经做过几次了,但从来没有遇到过这个问题。也许,这是关于for循环的一些基本问题,我不理解。出于某种原因,下面的代码比它应该运行的时间长10倍(好吧,比我认为的要长)。如果用户输入20,则运行到200。我通过设置I=0解决了这个问题;我
<head>
  <title>Fizz Buzz</title>
  <script>
    function fizzbuzz(){
      var num = prompt("Please enter a number between 1 and 100: ");
      for(var i=1; i<num+1; i++){
        if (i%3===0 && i%5===0){
          document.getElementById("div1").innerHTML = div1.innerHTML+"<p>Fizz Buzz</p>";
        }else if (i%3===0){
          document.getElementById("div1").innerHTML = div1.innerHTML+"<p>Fizz</p>";
        }else if (i%5===0){
          document.getElementById("div1").innerHTML = div1.innerHTML+"<p>Buzz</p>";
        }else{
          document.getElementById("div1").innerHTML = div1.innerHTML+"<p>"+i+"</p>";
        }
      }
    }
  </script>
</head>

<body onLoad = "fizzbuzz()">
  <div id = "div1">
    <h1>Fizz Buzz</h1>
  </div> 
</body>

嘶嘶作响
函数fizzbuzz(){
var num=prompt(“请输入一个介于1和100之间的数字:”);
对于代码中的(var i=1;i,
prompt()
返回一个字符串。Javascript将计算此行:

      for(var i=1; i<num+1; i++){
num
现在是一个数字,因此20+1=21(注意-无引号)和两个版本的循环都应该正确运行

在代码中,
prompt()
返回一个字符串。Javascript将计算此行:

      for(var i=1; i<num+1; i++){
num
现在是一个数字,因此20+1=21(注意-无引号)和两个版本的循环都应该正确运行

您需要执行以下操作:

var num = parseInt(prompt("Please enter a number between 1 and 100: "), 0);
prompt
返回一个字符串,因此如果您输入
20
num+1
是字符串
“201”
,而不是数字
21

,您需要执行以下操作:

var num = parseInt(prompt("Please enter a number between 1 and 100: "), 0);
prompt
返回字符串,因此如果输入
20
num+1
是字符串
“201”
,而不是数字
21

prompt()
返回字符串

只需使用
+prompt()
即可。这将使其成为一个数字。已更新。

提示()
返回一个字符串


只需使用
+prompt()
即可。这将使其成为一个数字。已更新。

此处
num
是一个字符串,您必须使用
parseInt
将其转换为int

for(var i=1; i<parseInt(num)+1; i++){
}

for(var i=1;i此处
num
是一个字符串,您必须使用
parseInt
将其转换为int

for(var i=1; i<parseInt(num)+1; i++){
}

for(var i=1;ito fiddle)将fizzbuzz()放在脚本窗口的底部,如果选择“无环绕”,则将其从主体标记中取出在jsfiddle的左侧菜单上,您的代码将运行。问题是jsfiddle正在将所有javascript添加到onLoad中。您是从HTML中的onLoad调用它的,因此需要在中或中声明函数。您在哪里声明
div1
变量?如果这对您有效,那么您正在IE中运行,IE是唯一的browser根据元素的ID自动创建全局变量。不要依赖它。始终使用
getElementById
。此外,您确实需要执行
getElementById
一次,并将对DOM元素的引用保存在变量中。名为
div1
也许?@slebetman:Chrome已经做了很长时间了,现在Firefox也做了.foobarbeque-你说得对!我尝试过这些选项,但我一定是太不耐烦了。我可能没有注意到它仍在处理中。JSFIDLE今晚似乎运行缓慢。斯诺伯恩-我也会尝试你的建议。修复你的小提琴put fizzbuzz();在脚本窗口底部,如果选择“不换行”,则将其从主体标记中取出在jsfiddle的左侧菜单上,您的代码将运行。问题是jsfiddle正在将所有javascript添加到onLoad中。您是从HTML中的onLoad调用它的,因此需要在中或中声明函数。您在哪里声明
div1
变量?如果这对您有效,那么您正在IE中运行,IE是唯一的browser根据元素的ID自动创建全局变量。不要依赖它。始终使用
getElementById
。此外,您确实需要执行
getElementById
一次,并将对DOM元素的引用保存在变量中。名为
div1
也许?@slebetman:Chrome已经做了很长时间了,现在Firefox也做了.foobarbeque-你说得对!我尝试了这些选项,但我一定是太不耐烦了。我可能没有注意到它仍在处理中。JSFIDLE今晚似乎运行缓慢。斯诺伯恩-我也会尝试你的建议。因此num+1成为字符串“201”和字符串“201”当它第一次与i比较时转换为int 201?是在for循环的第一次迭代之前执行num+1,还是在它与i比较之前执行num+1?@Nathan我不确定测试何时被评估。在这种情况下,它可以在循环之前被评估,但循环中的代码理论上可以改变条件因此我怀疑测试在每次迭代时都会被完全重新评估。因此num+1变成字符串“201”和字符串“201”当它第一次与i比较时转换为int 201?是在for循环的第一次迭代之前执行num+1,还是在它与i比较之前执行num+1?@Nathan我不确定测试何时被评估。在这种情况下,它可以在循环之前被评估,但循环中的代码理论上可以改变条件ion,所以我怀疑测试在每次迭代中都会被完全重新评估。这很方便-谢谢。所以“+”或“Number”或“parseInt”都可以工作。我不认为其中一个比另一个好多少?“+”保存击键!;-)实际上,与保存击键相比,有很多不同之处…看看:啊…看起来像“+”和“Number”两者都将保留浮点数中的小数点。也许我应该在我的项目中使用parseInt来更正非int提交。这很方便-谢谢。所以“+”或“Number”或“parseInt”都可以工作。我不认为其中一个比另一个好多少?“+”可以节省击键次数!;-)实际上,除了保存击键之外,还有很多不同之处……看一看:啊……看起来“+”和“Number”都将保留浮点中的小数空间。也许我应该在我的项目中使用parseInt来更正非int