Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript,当它';每当我试图计算参数的平均值时,它都是假的_Javascript - Fatal编程技术网

javascript,当它';每当我试图计算参数的平均值时,它都是假的

javascript,当它';每当我试图计算参数的平均值时,它都是假的,javascript,Javascript,对于console.log(通过平均值(75,42,98)和(34,93,77,89,49))来说,确实返回了正确的true。但是对于console日志(33,61),当33+61/2没有明显高于49时,它会出于某种原因自动返回true,而它应该返回false。原因可能是什么?这是因为没有按预期传递数组。传递平均值(33,61)传递两个参数 如果您希望函数具有与您在提供的示例中定义的签名相同的签名,则应按如下方式调用它: console.log('passingAverage(75,42,98)

对于console.log(通过平均值(75,42,98)和(34,93,77,89,49))来说,确实返回了正确的true。但是对于console日志(33,61),当33+61/2没有明显高于49时,它会出于某种原因自动返回true,而它应该返回false。原因可能是什么?

这是因为没有按预期传递数组。
传递平均值(33,61)
传递两个参数

如果您希望函数具有与您在提供的示例中定义的签名相同的签名,则应按如下方式调用它:

console.log('passingAverage(75,42,98) returns: ' + passingAverage(75,42,98));
console.log('passingAverage(34,93,77,89,49) returns: ' + passingAverage(34,93,77,89,49));
console.log('passingAverage(33,61) returns: ' + passingAverage(33,61));

console.log("\n");
如果要调用函数,如
passingAverage(33,61)
,则函数的定义如下:

passingAverage([33,61]); // pass an array of elements
函数passingAverage(){//没有参数,我们将使用参数数组
var n=arguments;//为每个函数定义参数它是传入的所有参数的数组
var平均值=0,i;
对于(i=0;iif((average/n.length)这是一个很好的例子,说明了为什么最好使用而不是console.logs来调试代码。您的函数总是返回
true
,因为您的平均值总是:

函数传递平均值(n){
var平均值=0,i;
对于(i=0;iconsole.log('passingAverage(33,61)返回:'+passingAverage(33,61));
使用
参数来循环所有的函数参数,无论其长度如何

function passingAverage(){ // no arguments, we will use the arguments array
    var n = arguments; // arguments is defined for every function it's an array of all the arguments passed in

    var average = 0, i;
    for (i=0; i < n.length; i+= 1){
        average += n[i];
    }
    if ((average/n.length)<49)
        return false;
    else
        return true;
}

// then call the function like this
passingAverage(1, 65, 23, 22); // without using an array
函数传递平均值(){
var平均值=0,i;
对于(i=0;i如果((average/n.length)向函数传递多个参数,但仅使用第一个参数,则函数需要一个数组,但传递的是一些单独的数字。对于passingAverage(75,42,98),
n
将等于75,
n.length
将等于
未定义的
,平均值将保持在0,您的状况
(0/未定义)<49
的计算结果为
NaN<49
,它的计算结果总是为false。因此,总是返回true。这是一个错误。您传递了一些数字,但试图将其视为数组。传递数组或只写函数passingAverage(…n)这个问题实际上是一个应该如何调试问题的示例。如果您查看在函数中收到的
n
,您会立即看到问题。那么我如何使我的函数接受与console.log语句的参数数量相匹配的未知数?
function passingAverage(){ // no arguments, we will use the arguments array
    var n = arguments; // arguments is defined for every function it's an array of all the arguments passed in

    var average = 0, i;
    for (i=0; i < n.length; i+= 1){
        average += n[i];
    }
    if ((average/n.length)<49)
        return false;
    else
        return true;
}

// then call the function like this
passingAverage(1, 65, 23, 22); // without using an array
function passingAverage() {
    var average = 0, i;
    for (i = 0; i < arguments.length; i++) {
        average += arguments[i];
    }
    if ((average/n.length)<49)
        return false;
    else
        return true;
}