symbol

symbol

        const obj={
            name:'r',
            [Symbol('symbol1')]:20
        }
        console.log(obj[Symbol('symbol1')]);//undefined

老师,我怎么能拿到20这个值

正在回答

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

1回答

同学你好,Symbol是引用类型,可以对比对象来理解它。如下两个对象,即使长得一样,在内存中也不是同一个地址,即本质上二者不是同一个,Symbol同理:

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

此时可以用变量存储Symbol,保证设置和获取的Symbol是同一个,比如:

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

祝学习愉快!

  • 慕芸芸 提问者 #1

    symbol不是基本数据类型吗?

    2023-02-15 10:18:23
  • 好帮手慕久久 回复 提问者 慕芸芸 #2

    仔细琢磨了一下ES6相关文档,之前的回复的确存在歧义。文档中只说了,Symbol是原始类型(primitive data type),undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)等类型并列存在。它是一种类似于字符串的数据类型,但却能通过函数调用的形式来获取实例,所以将其划分成基础类型、引用类型,个人感觉都不太对。为了避免歧义,图文节中的内容,稍后会进行调整。

    换个角度,可以从如下方面理解同学的第一次提问的问题。Symbol得到的值是唯一的,所以代码中的

    Symbol('symbol1')和[Symbol('symbol1')]得到的值不是同一个,即设置和获取的属性并不相同,因此得不到具体值,解决方式,还是用变量a存储一下。

    2023-02-15 11:05:52
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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