ES6-Symbol 学习

学习的时候是根据菜鸟教程学的。




	symbol 基本用法


	

概述:ES6引入了一种新的原始数据类型Symbol。表示独一无二的值,最大的用法是用来定义对象的唯一属性:

ES6的数据类型除了,Number、String、Boolean、Object、null、undefiend、还新增了Symbol

symbol函数栈不能使用new命令, 因为symbol是原始数据类型,不是对象。可以接受一个字符串作为参数,为新创建的Symbol提供描述。用来显示在控制台或者作为字符串的时候,便于区分。

 




	symbol使用场景


	

作为属性名:由于每一个symbol都不相等,所以可以用来作为对象的属性,避免属性的重复。

symbol作为对象属性名时,不能用 . 运算符,要用方括号。因为 . 运算符后面是字符串,所以取到的是symbol的属性,而不是Symbol的值sy属性

 




	symbol 注意点


	

Symbol 值作为属性名时,该属性是公有属性,可以在类的外部访问,但是不会出现在for...in、for...of 的循环中,也不会被Object.keys()、Object.getOwnPopertyNames()返回。如果要读取到一个对象的Symbol属性,可以通过Object.getOwnPropertySymbols()和Reflect.ownKeys()取到。

 




	symbol 定义常量


	

 




	symbol for


	

symbol类似于单例模式。 首先会在全局搜索被登记的symbol中是否有该字符串参数作为名称的的smbol值。如果有即返回该symbol值,若没有则新建并返回一个以该字符串参数为名称的symbol值,并登记在全局环境中搜索。

经测试,第一个为false,第二个为true,所以前面所说的都限制在同是symbol.for(),若一个是通过Symbol("KK")定义,一个是通过Symbol.for("PP")定义,则不可行。

Symbol.keyFor() 返回一个已登记的Symbol类型值的key,用来检测该字符串参数作为名称的Symbol值师傅已被登记。

同样的Symbol.keyFor() 也仅仅是针对Symbol.key()。

 

你可能感兴趣的:(ES6)