Javascript跳过功能

时间:2012-08-01 15:07:55

标签: javascript function skip

我正在为一个入门编程课程的项目工作,所以我使用的是基本的javascript。这是我们的第一个有功能的项目,由于某些原因我似乎无法使其工作。我调用了所有变量并在程序启动之前创建了该函数但由于某种原因它跳过了在我的程序中运行该函数。任何帮助将不胜感激。

这只是我的程序的开始,我不想编写剩下的代码,直到我弄清楚为什么这部分被打破,这就是为什么程序没有做任何事情,但如果它没有通过关闭窗口测试。

// 1 Declare Variables
var numTrees;
var counter = 0;
var answer = "no";

function treeFunction(answer, counter, numTrees) {
    while (answer == "no" && counter < 3) {
        if (numTrees == 5, 10) {
            answer = "yes";
        } else if (numTrees < 5 || numTrees > 10) {
            alert("That is an incorrect value.\nThe sample size should be less than 5 or greater than 10.\nPlease try again.");
            answer = "no";
            numTrees = prompt("Please reenter the amount of trees in your sample.");
            counter + 1;
        }
    }
    if (answer == "no") {
        alert("You have entered an incorrect number too many times.\nThe Program will now end.");
        window.open('', '_self', '');
        window.close();
    } else if (answer == "yes") {
        return;
    }
}
// 2 Prompt the Instructor for the number of Trees
numTrees = prompt("How many trees are in your sample?");
alert("You have entered: " + numTrees);
treeFunction(answer, counter, numTrees)
document.write(numTrees); {
    document.write("<br/> <br/>" + "End of Program.");
}

5 个答案:

答案 0 :(得分:7)

你有;

if(numTrees == 5, 10)​

错误的逗号导致if评估truthy表达式10,因此它总是通过测试,以测试5,6,7,8,9或10;

if(numTrees >= 5 && numTrees <= 10)

答案 1 :(得分:2)

您在此行中使用逗号的方式具有特殊含义:

if(numTrees == 5, 10)​

基本上它的作用是在转换为布尔值时返回10(第二个操作数)的值,而布尔值不是0,所以它是真的。

https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comma_Operator

您可能打算使用OR(||):

if(numTrees == 5 || numTrees == 10)​

或针对范围检查numTrees

if(numTrees >= 5 || numTrees <= 10)​

注意,在javascript中,建议您始终使用identity comparison===)而不是常规比较(==):

if(numTrees === 5 || numTrees === 10)​

答案 2 :(得分:1)

if(numTrees == 5, 10)​并不代表If numtrees is equal to 5,6,7,8,9, or 10

将其更改为

if(numTrees >= 5 || numTrees <=10)​

答案 3 :(得分:1)

if(numTrees == 5,10){    answer =“是”; }

这是一个奇怪的结构,我以前从未见过。我假设你认为它意味着“在5到10的范围内是numTrees吗?”,但事实并非如此。没有检查,我认为这实际上意味着你要一次检查两件事:

  • 是numTrees等于5?
  • 是10? (这实质上意味着“10不是0”,这当然总是正确的。)

由于您正在检查的第二个条件始终为真,因此您始终将答案设置为“是”。结果,你的循环总是运行一次 - 它启动,检查答案是“否”,设置答案为“是”,并立即停止循环。

您需要将条件更改为if(numTrees&gt; = 5&amp;&amp; numTrees&lt; = 10)

答案 4 :(得分:0)

你想要的是更像这样的东西:

    if (numTrees < 5 || numTrees > 10) {
        alert("That is an incorrect value.\nThe sample size should be less than 5 or greater than 10.\nPlease try again.");
        answer = "no";
        numTrees = prompt("Please reenter the amount of trees in your sample.");
        counter + 1;
    } else {
        answer = "yes";
    }