Symbol是什么,常用的用法
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是什么,常用的用法相关推荐
- python Pool常用函数用法总结
在本篇内容里小编给大家整理的是一篇关于python Pool常用函数用法总结内容,有需要的朋友们可以学习下. 1.说明 apply_async(func[,args[,kwds]):使用非堵塞调用fu ...
- C++string类常用函数 c++中的string常用函数用法总结
string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外,string类 ...
- python常用模块用法_python笔记之常用模块用法分析
python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ...
- [转]jQuery的each方法的几种常用的用法
下面提一下jQuery的each方法的几种常用的用法 复制代码 代码如下: var arr = [ "one", "two", "three&quo ...
- mysql常见关键字的用法_MySQL 常用关键字用法详解
MySQL 常用关键字用法详解 在开发工程中,操作数据库的时候经常会有不同类型的条件查询,除了使用where外,Mysql本身也提供了很多常用的关键字.本文主要介绍一些常用的关键字,像update.i ...
- 介绍lookup函数十大常用的用法
转载:https://baijiahao.baidu.com/s?id=1627410097387782364&wfr=spider&for=pc 介绍lookup函数十大常用的用法, ...
- html5 ins标签,HTML ins标签常用的用法有哪些?HTML ins常用属性的介绍
HTML ins标签常用的用法有哪些?HTML ins常用属性的介绍都在这里,本篇文章主要介绍了html ins标签用法和定义都有什么,还有一些html ins标签常用属性的介绍 HTML ins标签 ...
- maya 常用命令用法整理
MAYA常用命令用法整理 孤立模式 Shift + i -- 单独显示物体 Ctrl + h -- 隐藏该物体 Ctrl + Shift + h -- 显示上一个被隐藏的物体 /在Outliner / ...
- linux常用脚本的使用方法,Linux常用命令用法100个
Linux常用命令用法100个 发布时间:2013-05-25 13:53:27 作者:佚名 我要评论 平时用linux时,我有一个习惯就是把遇到的,比较有用,并且容易忘的命令,放到一个文本文 ...
- 汉语中常用标点符号用法
在项目的开发管理过程,书写文档是不可以避免的事情.正确的使用标点符号能够正确表达自己的意思,也方便别人理解自己书写的文档. 常用标点符号用法简表 一.基本定义 句子,前后都有停顿,并带有一定的句调,表 ...
最新文章
- factor--符号矩阵的因式分解
- Python之pyecharts:利用pyecharts绘制2020年11月16日微博话题热度排行榜实时变化
- 机器学习项目(四)疫情期间网民情绪识别
- 电商移动促销页面设计素材PSD分层模板,轻松出稿稿
- WaitForMultipleObjects函数及原子操作Interlocked系列函数
- nginx完全关闭log
- 贺利坚老师汇编课程54笔记:CF进位标志CARRY FLAG
- Flex桌面AIR软件日志添加
- 如何更换tomcat版本
- ios开发防止App被抓包(可正常请求)
- 恶意代码攻击实验(冰河木马和广外男孩的使用)
- Discuz论坛验证码破解
- Android 标题栏阴影大小,主题-XUI - Android 原生 UI 框架-面试哥
- 阿里云云计算ACP学习(一)---弹性计算
- matlab 内存不足
- flv实现视频实时监控
- 二分法查找(dichotomy)--python实现
- mysql C openmp_OpenMP: sections分段并行 | 学步园
- 接入微信universal link微信校验不通过
- 微信小程序----App生命周期
热门文章
- 新版unity2019.3 全局光照GI 系统以及反射探针的详细说明教程
- Nginx配置-SSLThe plain HTTP request was sent to HTTPS port解决
- ASEMI代理英飞凌SPW47N60C3功率MOS管的性能与应用
- 苹果发家秘决:滚雪球
- 推荐算法之CB,CF算法
- Calculate A +B
- 机器学习和深度学习知识框架图
- Idea之热部署插件JRebel+XRebel
- 报错:“[Thread-0] INFO CoreNLP - CoreNLP Server is shutting down.”
- linux查看某一个进程的socket连接数