Javascript i';在最后一个函数中,除了一个数字之外,我还得到了NaN

Javascript i';在最后一个函数中,除了一个数字之外,我还得到了NaN,javascript,arrays,function,object,nan,Javascript,Arrays,Function,Object,Nan,functin CalAverage返回NaN beisde的平均数。 我对它进行了编码,这样它将循环tips数组,并将tips和sum添加到sum变量中。 有人能解释一下问题吗?在调用calcTips之前,您正在调用calaverage,因此数组是空的平均值以返回和/提示结束。长度。由于sum是0和tips.length是0,这就是NaN(在JavaScript中,0/0是NaN,因为JavaScript使用IEEE 754双精度浮点,它指定了该行为) 要解决此问题,请执行以下操作: 当提示时

functin CalAverage返回NaN beisde的平均数。 我对它进行了编码,这样它将循环tips数组,并将tips和sum添加到sum变量中。
有人能解释一下问题吗?

在调用
calcTips
之前,您正在调用
calaverage
,因此数组是空的<代码>平均值以返回和/提示结束。长度。由于
sum
0
tips.length
0
,这就是
NaN
(在JavaScript中,
0/0
NaN
,因为JavaScript使用IEEE 754双精度浮点,它指定了该行为)

要解决此问题,请执行以下操作:

  • 提示时,不要对
    和进行除法。长度
    0
    ,并且
  • 在计算平均值之前先计算小费

  • 在调用
    calcTips
    之前,您正在调用
    calaverage
    ,因此数组为空<代码>平均值
    以返回和/提示结束。长度
    。由于
    sum
    0
    tips.length
    0
    ,这就是
    NaN
    (在JavaScript中,
    0/0
    NaN
    ,因为JavaScript使用IEEE 754双精度浮点,它指定了该行为)

    要解决此问题,请执行以下操作:

  • 提示时,不要对
    和进行除法。长度
    0
    ,并且
  • 在计算平均值之前先计算小费

  • 就我所见,平均小费是在小费实际存在之前计算出来的。如果移动上面提示的计算,它应该可以正常工作:

    mark.Average = calcAverage(mark.tips);
    john.Average = calcAverage(john.tips);
    mark.calcTips();
    john.calcTips();
    console.log(john);
    console.log(mark);
    

    就我所见,平均小费是在小费实际存在之前计算出来的。如果移动上面提示的计算,它应该可以正常工作:

    mark.Average = calcAverage(mark.tips);
    john.Average = calcAverage(john.tips);
    mark.calcTips();
    john.calcTips();
    console.log(john);
    console.log(mark);
    

    尝试调用这些函数

    mark.calcTips();约翰·卡尔蒂斯()

    以前

    mark.calcTips();
    john.calcTips();
    mark.Average = calcAverage(mark.tips);
    john.Average = calcAverage(john.tips);
    console.log(john);
    console.log(mark);
    
    因为调用calAverage()函数时提示是空数组

    代码应该是

    mark.Average = calcAverage(mark.tips);
    john.Average = calcAverage(john.tips);
    

    尝试调用这些函数

    mark.calcTips();约翰·卡尔蒂斯()

    以前

    mark.calcTips();
    john.calcTips();
    mark.Average = calcAverage(mark.tips);
    john.Average = calcAverage(john.tips);
    console.log(john);
    console.log(mark);
    
    因为调用calAverage()函数时提示是空数组

    代码应该是

    mark.Average = calcAverage(mark.tips);
    john.Average = calcAverage(john.tips);
    
    问题围绕着调用该函数时的“”绑定。您可以看到,
    calcTips
    是使用调用的,但是我提取该函数只是为了演示;这段代码仍然可以改进,但没有做太多更改,所以您可以看到发生了什么

    检查代码段:

    var john={
    姓名:“约翰·史密斯”,
    法案:[124、48、268、180、42],
    提示:[],
    最终:[]
    };
    变量标记={
    姓名:“马克·史密斯”,
    法案:[77、375、110、45],
    提示:[],
    最终:[]
    };
    函数calcTips(){
    for(设i=0;i=100&&this.bills[i]调用该函数时,问题围绕“”绑定。您可以看到,
    calcTips
    已被使用调用,但我仅提取该函数用于演示目的;该代码仍然可以改进,但没有做太多更改,因此您可以看到发生了什么

    检查代码段:

    var john={
    姓名:“约翰·史密斯”,
    法案:[124、48、268、180、42],
    提示:[],
    最终:[]
    };
    变量标记={
    姓名:“马克·史密斯”,
    法案:[77、375、110、45],
    提示:[],
    最终:[]
    };
    函数calcTips(){
    for(设i=0;i}否则,如果(this.bills[i]>=100和&this.bills[i]当
    tips.length==0
    时,您将得到
    0/0
    ,这确实是
    NaN
    。当
    tips.length==0
    时,您将得到
    0/code>这确实是
    NaN
    。您的上一条语句是错误的。请尝试
    console.log(1.0/0);
    。顺便说一句,这在C/C++中也是错误的,可能在浮点格式支持
    +inf
    -inf
    的其他语言中也是错误的。非常感谢。真不敢相信我犯了这样的错误:PEven
    1/0
    不会返回
    NaN
    (尽管在类型化语言中不会是这种情况)。
    console.log(typeof(50/0));//->数字
    无穷大是一个number@goodvibration-谢谢!修复了它。这就是我快速发帖并准备去吃饭的结果。它是
    0/
    0`(OP正在做的事情)这将导致
    NaN
    x/0
    ,其中
    x
    不是
    NaN
    0
    导致
    无限
    -无限
    。请注意,这与JavaScript的松散类型无关;
    NaN
    无限
    等都是
    数字
    type(IEEE-754双精度浮点)。这都符合IEEE 754-2019规范。您的上一个声明是错误的。请尝试
    console.log(1.0/0);
    。顺便说一句,这在C/C++中也是错误的,可能在浮点格式支持
    +inf
    -inf
    的其他语言中也是错误的。非常感谢。真不敢相信我犯了这样的错误:PEven
    1/0
    不会返回
    NaN
    (尽管在类型化语言中不会是这种情况)。
    console.log(typeof(50/0));//->数字
    无穷大是一个number@goodvibration-谢谢!修复了它。这就是我快速发帖并准备去吃饭的结果。它是
    0/
    0`(OP正在做的事情)这将导致
    NaN
    x/0
    ,其中
    x
    不是
    NaN
    0
    导致
    无限
    -无限
    。请注意,这与JavaScript的松散类型无关;
    NaN
    无限
    等都是
    数字
    type(IEEE-754双预
    mark.calcTips();
    john.calcTips(); 
    mark.Average = calcAverage(mark.tips);
    john.Average = calcAverage(john.tips);