JS的Symbol类型有何不同怎么样使用

2023-09-02 19:10:31 新闻中心 1

  类型值都互不相同。我们大家可以使用“Symbol”来表示唯一的值,下面是创建

  这样我们就创建了一个Symbol类型的值,并把这个值存储在了变量id中。

  我们在创建一个Symbol类型变量的时候,可以在参数中传入一些秒属性的字符串,用于描述这个变量的用途信息。

  Symbol类型在任何时候都是不同的,即使他们拥有相同的描述信息,描述只是一个标签,除此之外就没有别的用途了,例如:

  这个标签存在的意义,个人认为和Symbol不能直观的看到内部具体值的特性有关,通过添加一个描述信息,让我们对变量的用途有更直观的了解。

  JavaScript中的大多数类型都可以直接转换成字符串类型输出,所以我们不能直观的看到它的值到底是什么,例如我们可以直接用alert(123)把数字123转换成字符串弹出。

  JavaScript中的Symbol类型不能转成字符串是由于其内在的防治语言混乱的“语言保护”机制,因为字符串和Symbol在本质上有着区别,不应该将其中一个转换成另一个。

  试想一下,如果Symbol可以转为字符串,那么它就变成了一个生成独一无二字符串的函数,就不再具备独立数据类型的必要。

  如果我们真的想知道Symbol变量的值,我们能够正常的使用.toString()方法,如下所示:

  如果使用其他类型,则会隐式的转为字符串类型。对象的键在前面的章节有详细的介绍,这里不再重复。

  以上两个案例展示了在对象中插入Symbol类型作为键的用法,需要注意的是,在访问属性时需要使用obj[id]而不是obj.id,因为obj.id代表的是obj[‘id’]。

  Symbol非常明显的一个特征是,如果对象中使用Symbol作为键,那么使用for…in语句是访问不到Symbol类型的属性的。

  可以发现,[id]对象的值没有被打印出来,说明在对象属性列表中,使用for … in会自动忽略Symbol类型的键。

  虽然我们没有办法直接获取到Symbol键,但是Object.assign方法能够复制所有的属性:

  这并不影响Symbol的隐藏属性,因为复制后的对象仍然无法获取Symbol键。

  由于Symbol既不能直接转为字符串,我们没有办法直观的获得它的值,又不能通过for … in获得对象的Symbol属性,也就是说,如果没有Symbol变量本身,我们就没有办法获得对象内部的对应属性。

  因此,通过Symbol类型的键值,我们大家可以隐藏属性,这些属性只能我们自己访问,其他人都看不到我们的属性。

  我们在开发的过程中,需要和同事“张三”合作,而这个张三创建了一个非常好用的工具Tool,Tool是一个对象类型,我们想白嫖张三的Tool,并在此基础上添加一些自己的属性。

  以上示例展示了如何在别人写好的对象上添加自己的属性,那么为什么要使用Symbol类型而不是常规的字符串呢?

  以上代码由于重复使用”usage”,从而重写了原属性,会造成对象原功能异常。

  有些时候,我们希望通过一个字符串名称(标签),访问同一个Symbol对象,例如我们在代码的不同地方访问相同的Symbol。

  JavaScript会维护一个全局的Symbol注册表,我们大家可以通过向注册表中插入Symbol对象,并为对象起一个字符串名称访问该对象。

  向注册表插入或者读取Symbol对象需要使用Symbol.for(key)方法,如果注册表中有名为key的对象,就返回该对象,否则就插入新对象再返回。

  我们通过Symbol.for(key)就能以全局变量的方式使用Symbol对象,并使用一个字符串标记对象的名字。

  相反的,我们还能够正常的使用Symbol.keyFor(Symbol)反向的从对象获取名称。

  以上就是关于“JS的Symbol类型有何不同,怎么样使用”的介绍了,感谢各位的阅读,希望文本对大家有所帮助。如果想要了解更多知识,欢迎关注群英网络,小编每天都会为大家更新不同的知识。

  免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

  摘要:本文由golang教程栏目给大家介绍使用Go必须要格外注意的一些坑,希望对需要的朋友有所帮助!

  摘要:html换行标签是“br”。br标签能够在指定的位置插入一个换行符,它会告诉浏览器立即停止当前的文本流,并在下一行的左边,或者在左对齐的内联图形或表格的右边开始继续输出文本流。br是一个空标签,这在某种程度上预示着它没结束标签,写法为“br”或者“br/”。

  摘要:这篇文章给大家伙儿一起来分享的是常见的Java线程池面试题,文中汇总了很多Java线程池相关的面试题,对大家学习和工作都有一定的帮助。有需要的朋友可以借鉴,接下来就跟随小编一起了解看看吧。

全国咨询热线: 0512-52503999

咨询时间:9:00 ~ 18:00

招商加盟热线:0512-52503999