老师 这个为什么是NaN

老师 这个为什么是NaN

<!DOCTYPE html>

<html>

<head lang="en">

    <meta charset="UTF-8">

    <title>arguments</title>

</head>

<body>

    <script>

        //补充代码

        function add(){

            var sum=0,

                len=arguments.length,

                i;

            for(i=0;i<=len;i++){

            sum+=arguments[i];

            }

            console.log(sum);

            return sum/len;

        }

        var num=add(60,50,30,40);

        document.write(parseInt(num));

    </script>

</body>

</html>


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,在使用for循环遍历arguments类数组对象时,因为arguments下标值的范围为:0~length-1,

所以,循环变量i应从0开始(即i=0),到arguments类数组对象的长度-1结束(即i<=len-1)。

如果循环变量i取到len,那么arguments[len]是undefined,undefined与数字相加结果为NaN,建议参考如下修改:

http://img1.sycdn.imooc.com//climg/60e12930094ca9fc06950527.jpg

祝学习愉快!

  • qq_慕容254374 提问者 #1

    那是不是函数设定了数组内有六个数字,那么arguments是5,i如果=5的话i++就是6,所以结果就是undefined。因此i需要小于len

    2021-07-04 11:32:36
  • 好帮手慕然然 回复 提问者 qq_慕容254374 #2

    同学你好,是的,如果函数传的参数有六个,那么arguments的下标取值范围为0~5,

    当i=5时,执行i++就变成了6 ,此时取到的结果就是undefined,

    只要超出数组的下标范围,获取到的值就是undefined。

    祝学习愉快!

    2021-07-04 12:19:57
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师