概述
十、Symbol
介绍:ES6引入的一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型。Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于Symbol类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。Symbol函数可以接受参数表示对于这个唯一值的描述。
例:
let s = Symbol()
typeof s ;
//"'symbol'
其中变量s表示独一无二的值。
在这里需要注意:Symbol函数前不能使用new命令,否则会报错。因为Symbol的值不是对象,所以不能添加属性。
应用:
由于每一个Symbol值都是不相等的,这意味着Symbol值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性。这对于一个对象由多个模块构成的情况非常有用,能防止某一个键被不小心改写或覆盖。
例:
let s = Symbol();
var obj={};
obj[s] =”hello world” ;
console.log(obj[s]);
消除魔术字符串,其做法类似于Java中的静态常量:
const shapeType = {triangle: Symbol() }; shapeType.triangle
单例模式,调用一个类,任何时候返回的都是同一个实例:
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];
例子:
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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复