繁体   English   中英

此JavaScript代码有什么问题?

[英]Whats wrong with this javascript code?

<!doctype html>
<html>
<head>
    <title>Largest number</title>
</head>
<body>
    <center>
        <h2>largest number</h2>
        <script language="Javascript" type="text/Javascript">

            function Max(num1,num2,num3)
            {
               var largest=arguments[num1,num2,num3]
               for(i=0;i<arguments.length;i++)
               {
                  if((num1>num2)&&(num1>num3))
                      largest=num1
                  else if((num2>num1)&&(num2>num3))
                      largest=num2
                  else
                      largest=num3
               }
               return(largest)
            }
            document.write("</br>")
            var num1 = prompt("Enter first number"," ")
            var num2 = prompt("Enter second number"," ")
            var num3 = prompt("Enter third number"," ")
            var large = Max(num1,num2,num3)
            document.write("You entered",num1,",",num2,",",num3)
            document.write("</br>")
            document.write("The largest number is :",large)
        </script>
    </center>
</body>
</html>

该程序通过提示符接受3个数字。 仅对于特定的数字,它会提供奇怪和意外的输出。 如果在每个提示出现时我给该程序输入的数字分别为5,21和100,则输出将被赋予5作为最大数字。 即使对于输入10,24和5,输出也将为5。

使用if条件或数组时是否有任何问题。

请帮我。

您实际上并没有将数字传递给该函数。 prompt()值存储为字符串。

从词法上讲,“ 5”大于“ 100”,因为“ 5”在“ 1”之后。

您需要使用parseInt()来确保传入整数,或者如果允许十进制值,则可以使用parseFloat()

var large = Max(parseInt(num1, 10), parseInt(num2, 10), parseInt(num3, 10));

jsFiddle

您可能希望在Max()函数中进行数字解析,以确保参数始终为整数。

同样,将arguments[num1, num2, num3]的初始赋值给largest也没有意义。 该变量只需要声明。 您的函数中也有不必要的循环。

与此相关的另一个示例可能是

var myArray = [45,50,2,99,0];
var result = Math.max.apply(Math,myArray);
document.write("Max value is = "+result );

希望它能解决您的困惑。

您的代码存在一些问题。 首先,您不应该尝试访问arguments内部的多个值,尤其是不要通过值而不是索引来访问。

var largest;

在您的情况下应该足够了。 接下来,由于已经在检查条件,因此您绝对没有目的多次运行for循环。 确定是否要使用for look或链接的else / if语句。 另外,通过查看您的代码,您似乎希望使此函数接受所需的尽可能多的参数,而您的此实现不支持该参数。 因此,这是该代码的固定版本,几乎可以使用任何数量的参数(大于0)。

function Max(){
    var largest;
    for(i=0;i<arguments.length;i++){
        var intval = parseInt(arguments[i]);
        if (intval > largest)
            largest = intval;
    }
    return largest;
}

您可以使用如下方法:

var max = function(){
    var p = [];
    for(var i = 0; i < arguments.length; i++)
        p.push(parseInt(arguments[i]) || null);
    return Math.max.apply(Math.max, p);
}

console.log(max(1, 2, "123" ,"4", "null", "123123123"))

你可以玩演示

进阶范例

var max = function(){
    var p = [];
    for(var i = 0; i < arguments.length; i++){
        p.push(parseInt(arguments[i]) || null);
    }
    return Math.max.apply(Math.max, p);
}

var number = prompt("Enter the number of input");
if(parseInt(number) != NaN){
    var l = [];
    for(var i = 0; i < parseInt(number); i++){
        var e = prompt("Enter number #" + (i+1));
        l.push(e);
    }
    alert("Largest number is " + max.apply(null, l));
}

播放高级演示

您需要使用parseInt来确保将数字视为数字,然后顺序是您期望的。

function Max(num1,num2,num3)
{
 var largest=arguments[num1,num2,num3]
 for(i=0;i<arguments.length;i++)
 {
  var i1 = parseInt(num1);
  var i2 = parseInt(num2);
  var i3 = parseInt(num3);
  if((i1>i2)&&(i1>i3))
  largest=i1
  else if((i2>i1)&&(i2>i3))
  largest=i2
  else
  largest=i3
 }
 return(largest)
}
document.write("</br>")
var num1 = prompt("Enter first number"," ")
var num2 = prompt("Enter second number"," ")
var num3 = prompt("Enter third number"," ")
var large = Max(num1,num2,num3)
document.write("You entered",num1,",",num2,",",num3)
document.write("</br>")
document.write("The largest number is :",large)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM