博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6学习之Symbol
阅读量:5170 次
发布时间:2019-06-13

本文共 1278 字,大约阅读时间需要 4 分钟。

定义:一种新的原始数据类型,表示独一无二的值

const a = Symbol();const b = Symbol("foo") //接收参数的Symbol,参数表示对Symbol的描述

相同参数的Symbol不相等

const a = Symbol();const b = Symbol();a === b //falseconst c = Symbol("foo");const d = Symbol("foo");c === d //false

symbol值不能与其他类型做运算,但能显示的转化为字符串和布尔值

const c = Symbol("foo");let d = "hello" + c;    //TypeError: Cannot convert a Symbol value to a stringString(c); //Symbol(foo)c.toString(); //Symbol(foo)Boolean(c) //true

Symbol作为属性名,不能使用点符号,只能使用括号括起来

const a = Symbol("foo");let b = {};b.a = "Hello";b[a] = "Hi";console.log(b[a]) //Hi

Symbol作为属性名,遍历时:该属性不会出现在for...infor...of循环中,也不会被Object.keys()Object.getOwnPropertyNames()JSON.stringify()返回。但是可以通过Object.getOwnPropertySymbols获取Symbol的属性名

const obj = {};let a = Symbol('a');let b = Symbol('b');obj[a] = 'Hello';obj[b] = 'World';const objectSymbols = Object.getOwnPropertySymbols(obj);objectSymbols// [Symbol(a), Symbol(b)]

Symbol.for(),Symbol.keyFor()

  • Symbol.for():接受一个字符串作为参数,然后搜索有没有以该参数作为名称的Symbol值。如果有,就返回这个 Symbol 值,否则就新建并返回一个以该字符串为名称的 Symbol 值
const a = Symbol.for("foo");const b = Symbol.for("foo");a ===b //true
  • Symbol.keyFor():返回一个已登记的 Symbol 类型值的key
let s1 = Symbol.for("foo");Symbol.keyFor(s1) // "foo"let s2 = Symbol("foo");Symbol.keyFor(s2) // undefined

 

转载于:https://www.cnblogs.com/sghy/p/7793193.html

你可能感兴趣的文章
mysql查询前几条记录
查看>>
java二分法查找实现代码
查看>>
体系编程、SOC编程那些事儿
查看>>
mysql索引的艺术
查看>>
IBM RSA 的语言设置
查看>>
《http权威指南》阅读笔记(二)
查看>>
faster r-cnn cudnn版本不兼容问题
查看>>
[置顶] ListBox控件的数据绑定
查看>>
链表插入排序
查看>>
http://blog.csdn.net/yunye114105/article/details/7997041
查看>>
设计模式这个东西 刚刚发现几种模式好像大同小异啊
查看>>
关于 主键和外键
查看>>
python集合的交,差,并,补集合运算汇总
查看>>
校园分期支付的机遇和风险
查看>>
怕忘记-windows 2003服务器安装Node.js NPM
查看>>
一鍵分享(優化后)
查看>>
dcm4che 的依赖无法下载
查看>>
cygwin主要命令
查看>>
多线程存在哪些风险
查看>>
洛谷P2692 覆盖 题解
查看>>