怎么理解如果展开的不是对象,则会自动将其转为对象,再将其属性罗列出来

怎么理解如果展开的不是对象,则会自动将其转为对象,再将其属性罗列出来

​课上举的例子console.log({ ...1 });

这里转换成了一个空对象{},是不是说只要不是对象,展开就回转成{},再将其属性罗列出来。

正在回答 回答被采纳积分+1

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

1回答
好帮手慕慕子 2021-01-13 09:51:30

同学你好,对于你的问题解答如下:

1、可以结合课堂上的例子来理解,console.log({...1})这句代码中,要展开的数字1不是对象,那么会自动将其转成对象, 如下图所示:

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

由于数字转成对象后,里面没有任何属性值,所以罗列的属性为空,最终结果就是一个空对象了{}

2、如下图所示“展开就会转成{}”这句话的有误差

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

正确的理解应该是:只要不是对象,展开时会自动将其转成对象,再将其属性罗列出来,不一定转成的就是空对象{},例如:对字符串进行展开,虽然字符串也不是一个对象,但是自动转换成对象后,对象里面有属性的,如下图所示:

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


祝学习愉快~

  • 自动转对象,不是利用包装对象的形式吗,数值应该是new Number()转而不是new Object()吧?

    undefined和null前面不是说无法转为对象所以对其解构赋值会出错,这里怎么又可以自动转换成对象了呢?

    2023-01-10 16:40:13
  • 解答如下:

    1、自动转对象的方式并不唯一;不同的场合下,使用的方式是不一样的。比如解构赋值中,数字转对象是利用包装对象New Number()。而new Object()也可以将数据转成对象,只是用在其他场合中。

    2、解构赋值和展开运算的底层原理是不一样的,不能按照解构赋值的底层原理理解对象的展开运算符。

    3、对象展开运算符,底层就是那样写的,建议按照视频中讲解的,将结论记下来。

    2023-01-10 16:55:58
  • 谢谢老师。

    2023-01-10 18:09:32
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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