前言

小伙伴们大家好。上一篇文章我们分享了ES6中新增基本数据类型Symbol的用法及特点。通过上一篇的学习我们知道:用Symbol方法创建出来的Symbol值都是独一无二的,即使传递了一模一样的参数,那么如果有时候我就是想要创建一个相同的Symbol有没有办法呢,答案是肯定的。接下来将给大家分享一个能够创建相同Symbol值的方法。

Symbol的方法

  • Symbol.for()

有时候我们就是希望传递相同的参数就能够创建出相同的Symbol值来使用。Symbol为我们提供了一个方法:Symbol.for(),它接收一个字符串作为参数(可选),然后会在全局中搜索有没有以该参数作为描述的Symbol值,如果有则直接返回该Symbol,否则将以该参数作为描述创建一个新的Symbol值,并将其注册的全局环境供搜索,用Symbol方法创建的Symbol值是不会注册到全局的。

也就是说在使用Symbol.for()创建Symbol值时,首先会到全局环境中检测有没有创建,有就直接返回,没有再去创建新值,而Symbol则不管有没有都是创建新值。

另外:Symbol.for()在创建Symbol值时是登记在全局环境中的,不管有没有在全局环境运行

let s1 = Symbol.for('Yannis');
let s2 = Symbol.for('Yannis');
console.log(s1 === s2); // truelet s3 = Symbol('Yannis');
let s4 = Symbol('Yannis');
console.log(s3 === s4); // false// 不管在哪里调用,都会被注册登记到全局环境
function foo() {return Symbol.for('Yannis');
}
const x = foo();
const y = Symbol.for('Yannis');
console.log(x === y); // true

上面的代码中,s1、s2、s3、s4都是Symbol值,并且它们的描述也都是一样的,但是用Symbol.for()创建出来的s1和s2实际上是同一值,而用Symbol方法生成的则是完全不同的值。
Symbol.for()与Symbol()这两种写法都能够生成新的 Symbol值。但它们的区别是,前者会被登记在全局环境中供搜索,而后者不会。Symbol.for()不会每次都去创建一个新的 Symbol 值,而是先检查全局环境中是否已经存在,如果不存在才会创建新值。比如,用Symbol.for(“Yannis”)不管调用多少次,最后只有一个Symbol值,而如果换成Symbol(‘Yannis’),那么调用多少次就会生成多少个新的Symbol值,比如调用100次那就是100个全新的Symbol值。

  • Symbol.keyfor()

Symbol还为我们提供了一个keyfor方法,这个方法需要与Symbol.for方法配合使用,因为它是用来获取一个被登记过的Symbol值的key,就是创建Symbol值时的那个字符串描述。

  • keyfor方法接收一个Symbol类型的参数,用于返回该Symbol的key
  • keyfor方法只能返回被登记过的Symbol值的key,也就是说只有通过Symbol.for方法创建的Symbol值的key才会被返回
let s1 = Symbol.for("Yannis");
Symbol.keyFor(s1) // "Yannis"let s2 = Symbol("Yannis");
Symbol.keyFor(s2) // undefined

上面代码中,通过 Symbol.for(“Yannis”)创建的Symbol值的key “Yannis”被返回了,而用Symbol生成的值返回的确实Undefined。这也进一步印证了keyfor是返回被登记过的Symbol值的key的。

总结

本章我们又掌握了一个新姿势,原来Symbol的值也是可以相同的,关键在于用什么方法去创建。关于Symbol的两个方法就分享到这里了。

喜欢的小伙伴欢迎点赞留言加关注哦!

Symbol - 听说用了这个方法就能创建出相同的Symbol值相关推荐

  1. 上海高考听说测试什么软件,2021上海市高考外语听说测试模拟系统使用方法及注意事项...

    2021年上海市高考外语听说测试模拟系统如何使用?有哪些注意事项?小编整理了相关内容如下,大家快来了解一下吧! 2021年上海市高考外语听说测试模拟系统使用注意事项 试音 佩戴耳机时,话筒应略低于嘴巴 ...

  2. 如何查询2021广东高考英语成绩,2021广东英语听说考试成绩查询方法 什么时候查成绩...

    广东英语听说考试成绩可以通过官微查询.网站在线查询等. 2021广东英语听说考试成绩查询方法及时间 我省2021年普通高考英语听说考试成绩将于4月28日由我院统一发布.高考英语听说考试成绩按考生卷面成 ...

  3. java开启线程的方法_Java有几种方法开启线程?怎么实现带有返回值的线程?

    Java有几种方法开启线程?怎么实现带有返回值的线程? 发布时间:2020-05-22 11:20:08 来源:亿速云 阅读:238 作者:Leah Java有几种方法开启线程?怎么实现带有返回值的线 ...

  4. 第八天学习Java的笔记(方法有参无参,有返回值和无返回值)

    48天 方法 对比有参数和无参数 package Demo03;/* * 有参数:小括号当中有内容,当一个方法需要一些数据条件才能完成任务的时候,就是有参数 * 例如两个数字相加,必须知道两个数字各是 ...

  5. Java黑皮书课后题第7章:7.15(消除重复)使用下面的方法头编写方法,消除数组中重复出现的值。编写一个测试程序,读取10个数,调用该方法,并显示以一个空格分隔的不同数字

    7.15(消除重复)使用下面的方法头编写方法,消除数组中重复出现的值.编写一个测试程序,读取10个数,调用该方法,并显示以一个空格分隔的不同数字 题目 题目描述与运行示例 破题 代码 21.11.11 ...

  6. Factory Method(工厂方法)--对象创建型模式

    Factory Method(工厂方法)–对象创建型模式 一.意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 二.动机 1.在软 ...

  7. 本地方法(JNI)——数值参数与返回值

    [0]README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法(JNI)--数值参数与返回值 的基础知识 : 2) for source code, p ...

  8. 使用 @ControllerAdvice 和 实现ResponseBodyAdvice接口, 拦截Controller方法默认返回参数,统一处理返回值/响应体

    使用 @ControllerAdvice 和 实现ResponseBodyAdvice接口, 拦截Controller方法默认返回参数,统一处理返回值/响应体 1.Controller代码 以下是Co ...

  9. YOCTO项目介绍:通过提供模版、工具和方法帮助开发者创建基于linux内核的定制系统

    目录 YOCTO项目介绍 配置内核 build配套 Yocto ,是一个开源社区.它通过提供模版.工具和方法帮助开发者创建基于linux内核的定制系统,支持ARM, PPC, MIPS, x86 (3 ...

最新文章

  1. a:hover代表什么含义_板式热交换器型号该如何看?代表什么含义?
  2. 【 Linux 】常用命令总结(更新)
  3. python3.5中文手册_Python 入门指南 — Python3 中文手册 3.5.2 文档 | 三维部落
  4. opencv编译python库_linux 下编译安装 opencv-python
  5. Shell——运算符和条件判断
  6. 【客户案例】智能驾驶行业如何上云?
  7. DEFINE_PER_CPU
  8. bulma.css_如何建立一个? Bulma CSS的自适应博客设计
  9. 算法复习——迭代加深搜索(骑士精神bzoj1085)
  10. 【摘】把vmware的虚拟机硬盘vmdk文件分割成多个2G文件
  11. python3 定时任务_Python3.x:定时任务实现方式
  12. BZOJ-1002 轮状病毒 高精度加减+Kirchhoff矩阵数定理+递推
  13. Vue 中watch和computed 的用法及区别
  14. java date truncate_Java DateUtils.truncate方法代码示例
  15. Javascript分页:模拟后台返回数据方法
  16. C# 设置Word文本框中的文字旋转方向
  17. 大数据影响人类认知和行为习惯
  18. 设计模式四:用一个生产手机的简单例子说清楚工厂模式
  19. 网络变压器的线间电容(CWW)及网络变压器线圈分布电容(CD)
  20. 含论文基于SSH超市进销存管理系统【数据库设计、源码、开题报告】

热门文章

  1. 如何实现Shell脚本开机自运行
  2. 瞧一瞧看一看啦“一段眼睛跟着鼠标转动的跟踪眼代码”
  3. 计算机视觉基础理论知识
  4. 大工2021年11月份《电气制图与CAD》课程设计离线作业
  5. 4.12 使用反相命令反转图片色彩 [原创Ps教程]
  6. 帷幄匠心 c++ qt岗位,一二三四面 2个半小时
  7. 【阅读总结】Xen and the Art of Virtualization
  8. 防火墙阻止了从docker容器到外部的网络连接
  9. 计算机向u盘拷贝速度慢,U盘读写拷贝速度慢的解决措施
  10. 常规设置-Sinon.JS