2-23作业请老师检查,并答疑,谢谢。

来源:2-23 编程练习

慕桂英1122475

2023-03-22 11:19:41

如果按在调用函数时,预置好数值的方法是可以输出结果的。代码如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      var sum = 0,
        i = 0,
        input;
      function avg() {
        for (var i = 0; i < arguments.length; i++) {
          sum += arguments[i];
        }
        return sum / arguments.length;
      }

        var result = avg(2, 3, 4, 5, 6); //4
      document.write(parseInt(result));
    </script>
  </body>
</html>

然而想挑战一下,通过计算用户在对话框输入的数字时,就没有成功,想请教:

1、我猜测可能是调用join方法的时候,将数组转成了一整条字符串,所以没有办法计算平均值?

2、函数参数是不会自动进行Number转化后再进行运算的是么?

3、然而我在 var result = avg(str);处改为 var result = avg(Number(str));仍然页面输出的是NaN

2、有无更好的方法,实现调用函数,求用户输入的数字的平均值?

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      var sum = 0,
        i = 0,
        input,
        arr = [];//设定一个空数组用于存储输入的数字

      function avg() { //定义一个返回平均值的函数
        for (var i = 0; i < arguments.length; i++) {
          sum += arguments[i];
        }
        return sum / arguments.length;
      }

      //通过while函数弹窗,用户输入数字后,存入arr数组
      while (input !== null) {
        input = prompt("请输入数字,按取消退出");
        arr.push(input);
      }

      //将arr数组转为字符串,中间默认逗号隔开
      var str = arr.join();
      //将字符串的值作为arguments调用avg函数
      var result = avg(str);
      console.log(str);//输入2,3,4;控制台输出2,3,4
      document.write(parseInt(result));//结果不如预期,是NaN
    </script>
  </body>
</html>


写回答

1回答

好帮手慕久久

2023-03-22

同学你好,解答如下:

1、第一种方式代码是对的。

2、第二种方式问题很多,调整如下:

a)输入框没法终止,输入“退出”无效。调整如下:

https://img.mukewang.com/climg/641a77380946409706800228.jpg

b) avg的参数是一个个数字,不是连在一起的字符串:

https://img.mukewang.com/climg/641a77800958bee008110082.jpg

同学的写法属于“自创”,不符合语法要求。

c)prompt接收到的内容是字符串形式,直接参与+运算,会有问题,需要转成数字:

https://img.mukewang.com/climg/641a787b09dceb7506110244.jpg

d)将[1,2,3]这个数组中的数字依次传给avg,可以使用展开运算符...:

https://img.mukewang.com/climg/641a791409605f5409510754.jpg

...这个运算符,后面的课程会讲,暂时了解即可:

https://img.mukewang.com/climg/641a78fb09dd37a109600039.jpg

3、字符串形式的数字,不会自动转成数字再参数加运算,比如"123"+"345"不是数字123加上数字345。

祝学习愉快!

0

前端工程师

前端入门如同写字,如果你不知道从哪开始,那就选择前端(含Vue3.x,React17,TS)

20327 学习 · 17877 问题

查看课程