我是靠谱客的博主 飘逸蓝天,这篇文章主要介绍ggggxc学习笔记----ES6笔记IV----Symbol十、Symbol,现在分享给大家,希望可以做个参考。

十、Symbol

介绍:ES6引入的一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型。Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于Symbol类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。Symbol函数可以接受参数表示对于这个唯一值的描述。

例:

复制代码
1
2
3
let s = Symbol() typeof s ; //"'symbol'

其中变量s表示独一无二的值。

在这里需要注意:Symbol函数前不能使用new命令,否则会报错。因为Symbol的值不是对象,所以不能添加属性。

应用:

       由于每一个Symbol值都是不相等的,这意味着Symbol值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性。这对于一个对象由多个模块构成的情况非常有用,能防止某一个键被不小心改写或覆盖。

例:

复制代码
1
2
3
4
let s = Symbol(); var obj={}; obj[s] =”hello world” ; console.log(obj[s]);

消除魔术字符串,其做法类似于Java中的静态常量:

复制代码
1
const shapeType = {triangle: Symbol() }; shapeType.triangle

单例模式,调用一个类,任何时候返回的都是同一个实例:

复制代码
1
2
3
4
const FOO_KEY = Symbol.for('foo'); function A() { this.foo = 'hello'; } if (!global[FOO_KEY]) { global[FOO_KEY] = new A(); } module.exports = global[FOO_KEY];

例子:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
let sy1 = Symbol('sy1'); let sy2 = Symbol('sy2'); console.log(sy1, sy2); console.log(sy1 == sy2); //这里的sy1和sy2是两个Symbol值,如果不加参数,它们在控制台的输出都是Symbol(),不利于区分。有了参数以后,就等于为它们加上了描述,输出的时候就能够分清两个值。 // API // .for会到全局注册表中查找,是否有'sy3'这个对应的key值, // 如果有,将该key值对应的symbol值返回, // 如果没有,就新建一个symbol值 let sy3 = Symbol.for('hello'); let sy4 = Symbol.for('sy3'); console.log(sy3, sy4); console.log(sy3 == sy4); // .keyFor let key = Symbol.keyFor(sy3); console.log(key); // 应用 => 对象的属性名也可以指定为一个Symbol值 let obj = { [sy2]: 'nihao' } obj[sy1] = 'hello world' console.log(obj);

 

注意:在对象的内部,使用 Symbol 值定义属性时,Symbol 值必须放在方括号之中。

如果不放在方括号中,该属性的键名就是字符串,而不是之前所代表的那个 Symbol 值。

最后

以上就是飘逸蓝天最近收集整理的关于ggggxc学习笔记----ES6笔记IV----Symbol十、Symbol的全部内容,更多相关ggggxc学习笔记----ES6笔记IV----Symbol十、Symbol内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(98)

评论列表共有 0 条评论

立即
投稿
返回
顶部