Symbol基础:

Symbol是唯一的数据结构, 只要你声明了Symbol, 那么就是唯一的了.

  1. 直接声明:
   let ck = Symbol('ck') // 后面的‘ck’不是Symbol存储的值, 只是为了区别不同的Symbol的描述. let kb = Symbol('kb')console.log(ck);console.log(kb);console.log(ck === kb) // false// 即使后面的描述是一样的, 两个返回的也是false
let ck2  = Symbol('ck2')
let ck3 = Symbol('ck2')
console.log(ck2 === ck3) // false

2.通过for声明

let ck1 = Symbol.for('ck1')
let kb1 = Symbol.for('kb1')
console.log(Symbol.keyFor(ck1));
console.log(Symbol.keyFor(kb1));

通过for声明的Symbol, 要使用keyFor()来进行访问.

3.使用了Symbol声明的对象, 遍历的几种方式.

const symbol = Symbol('this is the Symbol')
const User = {name:'ck',[symbol]: 'ck is not a student any more'
}// 只能遍历到普通属性
for(let item in User) {console.log(item);
}
// name// 只能遍历到普通属性
for(let item of Object.keys(User)){console.log(item);
}
// name// 遍历Symbol属性
for(let item of Object.getOwnPropertySymbols(User)){console.log(item);
}
// symbol// 遍历到普通属性、Symbol属性
for(const item of Reflect.ownKeys(User)){console.log(item);
}
// name symbol

4.对象要隐藏一些不想别人访问到的属性

let symbol = Symbol('thi is a Symnol')class User{constructor(name, value){this.name = namethis[symbol] = value}
getName() {return `${this.name}${this[symbol]}`}
}const user = new User('bob', 'is a cookie')for(const item in user){console.log(item) // name 没有value, 因为访问不到
}for(const item in Reflect.ownKeys(user)){console.log(item) // name、symbol
}

Symbol到底用来干嘛

  • Symbol不是直接存储数据的, 而是, 作为一个独一无二的key, 放置数据的, 防止数据因为重复, 无法存进数据对象中,例如: obj中,存入key为1和‘1’的值, 后面的会把前面的覆盖掉.
class Cache{static data = {}static set(name, value) {this.data[name] = value}static get(name){console.log(this.data[name])return this.data[name]}
}let user = {name:'用户信息',key:Symbol('用户信息')
}let cart = {name: '购物车信息',key: Symbol('购物车信息')
}Cache.set(cart.key, '这是购物车存储的信息')
Cache.set(user.key, '这是用户存储的信息')
Cache.get(user.key) // 这是用户存储的信息
Cache.get(cart.key) // 这里购物车存储的信息
console.log(Cache.data) // { [Symbol(购物车信息)]: '这是购物车存储的信息', [Symbol(用户信息)]: '这是用户存储的信息' }

Symbol到底是个啥玩意相关推荐

  1. maven到底是个啥玩意

    maven到底是个啥玩意 在搞懂maven之前看了几次重复的maven的教学视频.不知道是自己悟性太低还是怎么滴,就是搞不清楚,现在弄清楚了,基本上入门了.写该篇博文,就是为了帮助那些和我一样对于ma ...

  2. 让我们搞搞清楚重写toString()到底是个什么玩意?

    OKOK自从开始java面向对象课程之后,作业里多了一个要求  overriding toString() Fine  我身边很多人对此很困惑,这尼玛到底是个啥玩意哪里来的?为什么要重写呢?那么我来解 ...

  3. TTY 到底是个什么玩意?

    先来回答一道面试题:我们知道在终端中有一些常用的快捷键,Ctrl+E 可以移动到行尾,Ctrl+W 可以删除一个单词,Ctrl+B 可以向前移动一个字母,按上键可以出现上一个使用过的 shell 命令 ...

  4. Elasticsearch的mapping到底是个什么玩意?

    编程界的小学生 一.举例 1.数据准备 2.搜索 3.分析 二.Mapping 1.是什么 2.如何查看 3.创建mapping 3.1.语法 3.2.Demo 3.3.analyzer字段释义 3. ...

  5. maven到底是个啥玩意~

    我记得在搞懂maven之前看了几次重复的maven的教学视频.不知道是自己悟性太低还是怎么滴,就是搞不清楚,现在弄清楚了,基本上入门了.写该篇博文,就是为了帮助那些和我一样对于maven迷迷糊糊的人. ...

  6. locale到底是个什么玩意

    关于locale的设定,为什么要设定locale 关于locale的设定 locale是国际化与本土化过程中的一个非常 重要的概念,个人认为,对于中文用户来说,通常会涉及到的国际化或者本土化,大致包含 ...

  7. Unity Mesh、MeshFilter、MeshRenderer到底是个啥玩意

    1.首先我们创建一个Cube在Unity中,在Hierarchy中点击右键3d Object ->Cube.然后查看右侧的Inspector窗口,如果没有的话,看顶部的Windows菜单,里面有 ...

  8. maven(一) maven到底是个啥玩意~

    我记得在搞懂maven之前看了几次重复的maven的教学视频.不知道是自己悟性太低还是怎么滴,就是搞不清楚,现在弄清楚了,基本上入门了.写该篇博文,就是为了帮助那些和我一样对于maven迷迷糊糊的人. ...

  9. 怎么用python写名字_python中的__name__ 到底是个什么玩意?应该怎么用到它?

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:Python进击者 ( 想要学习Python?Pyth ...

最新文章

  1. 日记 [2007年02月03日]邮件退信问题的解决
  2. 一卡通变“一脸通” 人脸识别更新校园考勤方式
  3. CEdit 控件 更新内容的 方法(可以自动滚动至末尾)
  4. leetcode 567. 字符串的排列(滑动窗口)
  5. 为什么代码正确却没有爬虫的信息_为什么敷面膜没有效果?原来这才是敷面膜的正确步骤...
  6. setuptools安装_在Ubuntu 18.04系统上安装ERPNext ERP
  7. WampServer的配置
  8. 玩转文字!汉字海报的布局排版形式成功案例,给你灵感!
  9. 一步一步写算法(之哈夫曼树 下)
  10. c语言推箱子源代码及注释,求大神 解析推箱子源代码 要详细
  11. 衰减学习率真的有用吗?
  12. Linux中如何恢复rm命令误删除的文件之extundelete编译安装及使用
  13. 深度学习2.0-22.Keras高层接口之自定义层或网络
  14. 使用标尺工具获取某点的坐标
  15. 网络七层协议,一张图片告诉你
  16. 超好用笔记软件Typora安装教程
  17. Easy Excel
  18. 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记
  19. 求求你!别再考秒杀系统了!看完这篇怼回去 ~
  20. Pytest_fixture装饰器、调用fixture的三种方法、usefixtures与传fixture区别、fixture自动使用autouse=True

热门文章

  1. 蓝桥杯备赛 | 官方题库基础练习(含VIP试题)试题+答案(共33题)
  2. 多线程面试题Top50
  3. 使用 jQuery.i18n.properties 实现 Web 前端的国际化
  4. qq邮箱格式的Java代码_java mail qq邮箱配置 实例
  5. Mobvista亿级流量背后的云服务架构支撑
  6. EMQ 与 TDengine 达成战略合作协议
  7. win 10文件夹、资源管理器卡顿问题解决办法
  8. oracle1422,Oracle错误:数据泵导出时报错ORA-1422
  9. 工业机器人的6大应用场景
  10. 我在计算机课上画图的英语,在计算机中画图 课件.ppt