1.Symbol是什么?

Symbol是es6新引入的原始数据类型,表示独一无二的值。
Symbol值通过Symbol函数生成:

let s = Symbol()
console.log(typeof s) // "symbol"

2.Symbol的作用

es5的对象属性名都是字符串,这容易造成属性名冲突。新引入的Symbol类型很好地解决了这个问题。只要属性名属于Symbol类型,就是独一无二的,不会与其他属性名产生冲突。

Symbol函数可以接受一个字符串作为参数,表示对Symbol实例的描述:

    let s1 = Symbol('s1');console.log(s1);  // Symbol(s1)

如果Symbol的参数是一个对象,会调用对象的toString方法,并将其转为字符串:

 const obj = {a:1,b:2}  const obj2 = {a:1, b:2, toString(){return 'abc'} } //给对象定义了一个toString方法const arr = ['a','b']const fun = function(){return 1}console.log(Symbol(obj));  // Symbol([object Object])console.log(Symbol(obj2)); // Symbol(abc)console.log(Symbol(arr));  // Symbol(a,b)console.log(Symbol(fun));  // Symbol(function(){return 1})

3.Symbol作为对象属性名

 const mySymbol = Symbol()//第一种写法const a = {}a[mySymbol] = 'helloA'//第二种写法const b = {[mySymbol]: 'helloB'}//第三种写法const c= {}Object.defineProperty(c,mySymbol,{ value:'helloC'} )console.log(a[mySymbol]);  //helloAconsole.log(b[mySymbol]);  //helloBconsole.log(c[mySymbol]);  //helloC

4.Symbol作为属性名时的遍历

Symbol作为属性名,该属性不会出现在for…in、for…of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()返回。
Object.getOwnPropertySymbols() 返回一个数组成员是当前对象的所有用作属性名的Symbol值。
Reflect.ownKeys() 可以返回所有类型的键名。

const obj = {a:'a',b:'b'}const a = Symbol('a')const b = Symbol('b')obj[a] = 'helloA'obj[b] = 'helloB'for (let i in obj){console.log(i);  // a  b}console.log(Object.getOwnPropertyNames(obj)); // ['a', 'b']console.log( Object.getOwnPropertySymbols(obj)); // [Symbol(a), Symbol(b)]console.log(Reflect.ownKeys(obj));  // ['a', 'b', Symbol(a), Symbol(b)]

5. Symbol.for()、Symbol.keyFor()

当我们希望使用同一个Symbol值,可以使用Symbol.for() 方法。它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的Symbol值。有就返回这个Symbol值,没有就新建并返回一个以该字符串为名称的Symbol值。

Symbol.keyFor() 方法返回一个已登记的Symbol类型值的key

 const cc = Symbol.for('111')const dd = Symbol.for('111')console.log( cc===dd );  //trueconsole.log(Symbol.keyFor(cc));  //”111“

Symbol是什么,常用的用法相关推荐

  1. python Pool常用函数用法总结

    在本篇内容里小编给大家整理的是一篇关于python Pool常用函数用法总结内容,有需要的朋友们可以学习下. 1.说明 apply_async(func[,args[,kwds]):使用非堵塞调用fu ...

  2. C++string类常用函数 c++中的string常用函数用法总结

    string类的构造函数: string(const char *s);    //用c字符串s初始化 string(int n,char c);     //用n个字符c初始化 此外,string类 ...

  3. python常用模块用法_python笔记之常用模块用法分析

    python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ...

  4. [转]jQuery的each方法的几种常用的用法

    下面提一下jQuery的each方法的几种常用的用法 复制代码 代码如下:  var arr = [ "one", "two", "three&quo ...

  5. mysql常见关键字的用法_MySQL 常用关键字用法详解

    MySQL 常用关键字用法详解 在开发工程中,操作数据库的时候经常会有不同类型的条件查询,除了使用where外,Mysql本身也提供了很多常用的关键字.本文主要介绍一些常用的关键字,像update.i ...

  6. 介绍lookup函数十大常用的用法

    转载:https://baijiahao.baidu.com/s?id=1627410097387782364&wfr=spider&for=pc 介绍lookup函数十大常用的用法, ...

  7. html5 ins标签,HTML ins标签常用的用法有哪些?HTML ins常用属性的介绍

    HTML ins标签常用的用法有哪些?HTML ins常用属性的介绍都在这里,本篇文章主要介绍了html ins标签用法和定义都有什么,还有一些html ins标签常用属性的介绍 HTML ins标签 ...

  8. maya 常用命令用法整理

    MAYA常用命令用法整理 孤立模式 Shift + i -- 单独显示物体 Ctrl + h -- 隐藏该物体 Ctrl + Shift + h -- 显示上一个被隐藏的物体 /在Outliner / ...

  9. linux常用脚本的使用方法,Linux常用命令用法100个

    Linux常用命令用法100个 发布时间:2013-05-25 13:53:27   作者:佚名   我要评论 平时用linux时,我有一个习惯就是把遇到的,比较有用,并且容易忘的命令,放到一个文本文 ...

  10. 汉语中常用标点符号用法

    在项目的开发管理过程,书写文档是不可以避免的事情.正确的使用标点符号能够正确表达自己的意思,也方便别人理解自己书写的文档. 常用标点符号用法简表 一.基本定义 句子,前后都有停顿,并带有一定的句调,表 ...

最新文章

  1. factor--符号矩阵的因式分解
  2. Python之pyecharts:利用pyecharts绘制2020年11月16日微博话题热度排行榜实时变化
  3. 机器学习项目(四)疫情期间网民情绪识别
  4. 电商移动促销页面设计素材PSD分层模板,轻松出稿稿
  5. WaitForMultipleObjects函数及原子操作Interlocked系列函数
  6. nginx完全关闭log
  7. 贺利坚老师汇编课程54笔记:CF进位标志CARRY FLAG
  8. Flex桌面AIR软件日志添加
  9. 如何更换tomcat版本
  10. ios开发防止App被抓包(可正常请求)
  11. 恶意代码攻击实验(冰河木马和广外男孩的使用)
  12. Discuz论坛验证码破解
  13. Android 标题栏阴影大小,主题-XUI - Android 原生 UI 框架-面试哥
  14. 阿里云云计算ACP学习(一)---弹性计算
  15. matlab 内存不足
  16. flv实现视频实时监控
  17. 二分法查找(dichotomy)--python实现
  18. mysql C openmp_OpenMP: sections分段并行 | 学步园
  19. 接入微信universal link微信校验不通过
  20. 微信小程序----App生命周期

热门文章

  1. 新版unity2019.3 全局光照GI 系统以及反射探针的详细说明教程
  2. Nginx配置-SSLThe plain HTTP request was sent to HTTPS port解决
  3. ASEMI代理英飞凌SPW47N60C3功率MOS管的性能与应用
  4. 苹果发家秘决:滚雪球
  5. 推荐算法之CB,CF算法
  6. Calculate A +B
  7. 机器学习和深度学习知识框架图
  8. Idea之热部署插件JRebel+XRebel
  9. 报错:“[Thread-0] INFO CoreNLP - CoreNLP Server is shutting down.”
  10. linux查看某一个进程的socket连接数