为什么控制台报错?

为什么控制台报错?

const obj = {

0: 1,

1: '22',

2: false,

length: 2

};

console.log([...obj]);

正在回答

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

2回答

同学你好,解答如下:

(1)“为什么函数里面console.log([...arguments]);不会报错”请问是放在哪一个函数中呢?这边测试放在原来的代码中是报错的。不过扩展运算符是可以直接使用在类数组上面的

(2)迭代器:迭代器就是为实现对不同集合进行统一遍历操作的一种机制,只要给需要遍历的数据结构部署Iterator接口,通过调用该接口,或者使用消耗该接口的API实现遍历操作。

Symbol.iterator方法就是给使用的对象定义迭代器,让其实现“可被遍历”。

(3)数组可以使用扩展运算符,是因为数组本身自带Symbol.iterator。那么给对象添加Symbol.iterator的话,对象也就可以使用扩展运算符,而不报错了哦。

不过这部分内容比较难,建议同学先了解一下,等到以后有一定的知识体系的时候再来复习下现在不太懂的内容。

祝学习愉快~

卡布琦诺 2020-03-21 15:36:19

同学你好,报错是因为js无法使用扩展运算符展开对象。想要解决报错,需要先了解几个知识点:

1、Symbol.iterator为每一个对象定义了默认的迭代器。该迭代器可以被 for…of 循环使用。

2、Reflect.ownKeys静态方法 Reflect.ownKeys() 返回一个由目标对象自身的属性键组成的数组。

3、next方法是迭代器iterator的一个方法,它的返回至少有一个对象,且对象中有两个属性:value和done

(1)value 用于定义迭代出来的值

(2)done 布尔类型:

    ①设置true,则直接返回;

    ②不设置或者设置false,则继续走方法,类似for循环。

接下来改写同学的这段代码:

http://img1.sycdn.imooc.com//climg/5e75c3e409c59c0207050616.jpg

如果我的回答帮助了你,希望采纳,祝学习愉快!

  • 提问者 慕尼黑5122342 #1
    那为什么函数里面console.log([...arguments]);不会报错,arguments不是类数组对象吗?老师,Symbol.iterator为每一个对象定义了默认的迭代器是什么意思?迭代器是什么意思?为什么加了obj[Symbol.iterator]=function (){}就不报错了?
    2020-03-23 11:32:24
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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