es6 中的 symbol

symbol 的引入是为了解决对象中的属性名冲突的问题

使用symbol() 函数生成的变量值不与任何的变量值相等,  所有用改变量的值做属性名是不会冲突的

symbol 可以转化为字符串, 可以转化为 boolean. 其余的运算不能参与

在对象中使用 symbol 必须使用方括号, 不能使用点, 引用也是如此

看来 symbol  只是生成一个不相等值的函数, 

symbol 不能被普通的方法遍历

Reflect.ownKeys 可以获取到对象中的 symbol 的属性

Object.getOwnPropertyNames(obj)  可以获取 symbol

symbol的不能被普通的方法遍历可以利用做私有属性名

Symbol.for

可以看成 一个缓存堆, 如果这个堆中存在一个值, 就直接拿出来使用, 否则就是创建一个返回,  注意其值的获取方式是其描述是否是一致的

 

Symbol.keys

返回一个symbol 变量的描述, 只能是已经登记的(使用 symbol.for的)

语言内置的函数, 只是由字符串变为了 symbol的方式来引用,为的是不被冲突, 例如数组的某一个方法名 . 例如 Array[Symbol.hasinstance]

总结

  没发现 symbol 有什么必需的, 其作用就是生出一个不可能相同的值. 

  感觉真是饶了一个弯子, symbol 可以保证一个对象中的不被冲突, 但是变量名怎么保证不冲突?? 

 

原文地址:https://www.cnblogs.com/cgdx/p/10754854.html