为什么无法全部遍历打印

为什么无法全部遍历打印

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        const obj = {
            "0": "xm",
            "sex": "male",
            length: 2
        }
        // 在此补充代码
        obj[Symbol.iterator]=Array.prototype[Symbol.iterator];
        for(const i of obj){
            console.log(i)
        }
       
    </script>
</body>

</html>

问题描述:

为什么无法全部遍历打印,问题在哪?

正在回答

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

1回答

同学你好,遍历的是有索引的,例如数组:

https://img1.sycdn.imooc.com//climg/63de036c096fbca406620163.jpg

而对象中的属性名为数字的只有第一个0,所以只输出xm;不是数字的,会返回undefined值,并且length不会输出。

建议参考课程中的写法:

https://img1.sycdn.imooc.com//climg/63de0405094d51bc08160715.jpg

修改为:

const obj = {
            "0": "xm",
            "sex": "male",
            length: 2
        };
        // 在此补充代码
        // obj[Symbol.iterator] = Array.prototype[Symbol.iterator];
        obj[Symbol.iterator] = () => {

            let index = 0;

            return {

                next() {

                    index++;

                    if (index === 1) {

                        return {

                            value: obj["0"],

                            done: false,

                        };

                    } else if (index === 2) {

                        return {

                            value: obj["sex"],

                            done: false,

                        };

                    } else if (index === 3) {

                        return {

                            value: obj["length"],

                        };

                    } else {

                        return {

                            done: true,

                        };

                    }

                },

            };

        };
        for (const i of obj) {
            console.log(i);
        }

祝学习愉快!

  • GanKuoLong 提问者 #1

    看了代码我有两个问题

    1. 为什么函数没有()执行也能运行函数语句并返回值?

    2. 对象内为什么可以放index++跟if判断语句,不是说对象内只能放键与值对吗?

    2023-02-04 15:30:50
  • 好帮手慕星星 回复 提问者 GanKuoLong #2

    1、es6中的for...of循环,Iterator 接口主要供for...of消费。文档:

    https://es6.ruanyifeng.com/#docs/iterator

    https://img1.sycdn.imooc.com//climg/63de1b5c09dd00b206520336.jpg

    可以理解为next()方法是for...of遍历的时候内部自动调用的,不需要我们手动调用。

    2、next是方法不是对象,所以可以定义变量以及判断等语句

    https://img1.sycdn.imooc.com//climg/63de1da20980fafc06140377.jpg

    自己理解下。

    2023-02-04 16:56:19
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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