对象中使用Symbol来定义属性名

对象中使用Symbol来定义属性名

const obj={
name:'alex',
[Symbol('imooc')]:18,
[Symbol('Symbol.cc')]:()=>console.log('hello')
};
console.log(obj)
console.log(obj[Symbol.imooc]);// undefine
console.log(obj[Symbol.cc]) //undefined
  1. 老师,我使用Symbol数据来定义属性名,那么我怎样才能获得这些值呢?直接使用中括号打印结果是undefined

  2. 数组中的Symbol(Symbol.iterator)可以直接使用[1,2,3][Symbol.iterator]()来调用,为什么我这不可以?

  3. 相关截图:

    https://img1.sycdn.imooc.com//climg/63817b7e099638fa14460120.jpg

正在回答

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

1回答

同学你好,解答如下:

1、改变一下定义方式,Symbol()提前声明参考:

https://img1.sycdn.imooc.com//climg/63817e920953aae711290425.jpg

https://img1.sycdn.imooc.com//climg/63817eae09250c0113590151.jpg

2、对象中没有遍历器,所以不能用Symbol.iterator调用。

3、如果想调用对象中的Symbol('Symbol.cc')方法,可以这样:

https://img1.sycdn.imooc.com//climg/63817f58099e408a11350459.jpg

https://img1.sycdn.imooc.com//climg/63817f600975b91f09380133.jpg

自己再测试下,祝学习愉快!

  • 小白_0001 提问者 #1
    1. 如果是将Symbol赋值给变量再带入对象中这种方式我知道,但我这种直接使用的话是不是就没法直接获得值啊?

    2. 对象是没有Iterator,我想知道的是类似数组这种[1,2][Symbol.iterator]()调用方式在一开始是怎么定义在数组上的,我能不能用同样的方式将函数定义在我的对象上,从而让我也可以以这种[Symbol.cc]的方式来调用

    2022-11-26 13:49:08
  • 好帮手慕星星 回复 提问者 小白_0001 #2

    1、是的 。

    2、数组上本身就有[Symbol.iterator]

    https://img1.sycdn.imooc.com//climg/6381b35f09489ed406810064.jpg

    https://img1.sycdn.imooc.com//climg/6381b375098ce76910630197.jpg

    https://img1.sycdn.imooc.com//climg/6381b37e09ac150e07180060.jpg

    如果想遍历对象,后面课程中有讲解方法

    https://class.imooc.com/lesson/2130#mid=50664

    可以接续往后面学习。

    2022-11-26 14:36:40
  • 小白_0001 提问者 回复 好帮手慕星星 #3

    好的,谢谢老师

    2022-11-26 15:00:32
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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