zoukankan      html  css  js  c++  java
  • 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 可以保证一个对象中的不被冲突, 但是变量名怎么保证不冲突?? 

     

  • 相关阅读:
    1-22
    好久未更
    学习进度条 第十六周
    构建之法阅读笔记06
    返回一个整数数组中最大子数组的和(补充:输出该子数组)
    构建执法阅读笔记4
    第三周的学习进度情况
    构建之法阅读笔记03
    四则运算三
    安卓小程序之“标准体重计算器”
  • 原文地址:https://www.cnblogs.com/cgdx/p/10754854.html
Copyright © 2011-2022 走看看