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

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

 

 

ES5对象属性名都是字符串容易造成属性名的冲突。

eg:var a = { name: 'lucy'};a.name = 'lili'; 这样就会重写属性

ES6引入了一种新的原始数据类型Symbol,表示独一无二的值。

重新复习下新知识:基本数据类型有6种:Undefined、Null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。

这里新添加了一种:Symbol

注意,Symbol函数前不能使用new命令,否则会报错。这是因为生成的Symbol是一个原始类型的值,不是对象

Symbol函数可以接受一个字符串作为参数,表示对Symbol实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。

// 没有参数的情况var s1 = Symbol();var s2 = Symbol();s1 === s2 // false// 有参数的情况var s1 = Symbol("foo");var s2 = Symbol("foo");s1 === s2 // false

Symbol值不能与其他类型的值进行运算

作为属性名的Symbol

var mySymbol = Symbol();// 第一种写法var a = {};a[mySymbol] = 'Hello!';// 第二种写法var a = {  [mySymbol]: 'Hello!'};// 第三种写法var a = {};Object.defineProperty(a, mySymbol, { value: 'Hello!' });// 以上写法都得到同样结果a[mySymbol] // "Hello!"

注意,Symbol值作为对象属性名时,不能用点运算符。

var a = {};var name = Symbol();a.name = 'lili';a[name] = 'lucy';console.log(a.name,a[name]);             //lili,lucy

Symbol值作为属性名时,该属性还是公开属性,不是私有属性。

这个有点类似于java中的protected属性(protected和private的区别:在类的外部都是不可以访问的,在类内的子类可以继承protected不可以继承private)

但是这里的Symbol在类外部也是可以访问的,只是不会出现在for...infor...of循环中,也不会被Object.keys()Object.getOwnPropertyNames()返回。但有一个Object.getOwnPropertySymbols方法,可以获取指定对象的所有Symbol属性名

Symbol.for(),Symbol.keyFor()

Symbol.for机制有点类似于单例模式,首先在全局中搜索有没有以该参数作为名称的Symbol值,如果有,就返回这个Symbol值,否则就新建并返回一个以该字符串为名称的Symbol值。和直接的Symbol就点不同了。

var s1 = Symbol.for('foo');var s2 = Symbol.for('foo');s1 === s2 // true

Symbol.keyFor方法返回一个已登记的Symbol类型值的key。实质就是检测该Symbol是否已创建

var s1 = Symbol.for("foo");Symbol.keyFor(s1) // "foo"var s2 = Symbol("foo");Symbol.keyFor(s2) // undefined

 

转载于:https://www.cnblogs.com/ecmasea/p/8985806.html

你可能感兴趣的文章
[LeetCode] 3Sum
查看>>
Mina工具类v1.5
查看>>
Golang在Linux环境下的POSIX风格socket编程
查看>>
白话经典算法系列之中的一个 冒泡排序的三种实现
查看>>
Android四大组件之——Activity(一)定义、状态和后退栈(图文详解)
查看>>
详细解读Android中的搜索框(二)—— Search Dialog
查看>>
经常使用的webservice接口
查看>>
SAP ABAP第一,两,三代出口型BADI实现 解释的概念
查看>>
mybatis完美的实战教程
查看>>
What is the difference between DAO and DAL?
查看>>
java抓取动态生成的网页
查看>>
从零开始山寨Caffe·叁:全局线程管理器
查看>>
Ubuntu 修复windows启动项
查看>>
LCA在线算法ST算法
查看>>
PowerShell 导出SharePoint管理中心解决方式
查看>>
java操作mongodb(连接池)(转)
查看>>
Android入门(十一)SQLite CURD
查看>>
一个双线程下同一时候操作指针变量导致野指针出现的问题总结
查看>>
Servlet过滤器和监听器
查看>>
js闭包应用
查看>>