Symbol到底是个啥玩意
Symbol基础:
Symbol是唯一的数据结构, 只要你声明了Symbol, 那么就是唯一的了.
- 直接声明:
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到底是个啥玩意相关推荐
- maven到底是个啥玩意
maven到底是个啥玩意 在搞懂maven之前看了几次重复的maven的教学视频.不知道是自己悟性太低还是怎么滴,就是搞不清楚,现在弄清楚了,基本上入门了.写该篇博文,就是为了帮助那些和我一样对于ma ...
- 让我们搞搞清楚重写toString()到底是个什么玩意?
OKOK自从开始java面向对象课程之后,作业里多了一个要求 overriding toString() Fine 我身边很多人对此很困惑,这尼玛到底是个啥玩意哪里来的?为什么要重写呢?那么我来解 ...
- TTY 到底是个什么玩意?
先来回答一道面试题:我们知道在终端中有一些常用的快捷键,Ctrl+E 可以移动到行尾,Ctrl+W 可以删除一个单词,Ctrl+B 可以向前移动一个字母,按上键可以出现上一个使用过的 shell 命令 ...
- Elasticsearch的mapping到底是个什么玩意?
编程界的小学生 一.举例 1.数据准备 2.搜索 3.分析 二.Mapping 1.是什么 2.如何查看 3.创建mapping 3.1.语法 3.2.Demo 3.3.analyzer字段释义 3. ...
- maven到底是个啥玩意~
我记得在搞懂maven之前看了几次重复的maven的教学视频.不知道是自己悟性太低还是怎么滴,就是搞不清楚,现在弄清楚了,基本上入门了.写该篇博文,就是为了帮助那些和我一样对于maven迷迷糊糊的人. ...
- locale到底是个什么玩意
关于locale的设定,为什么要设定locale 关于locale的设定 locale是国际化与本土化过程中的一个非常 重要的概念,个人认为,对于中文用户来说,通常会涉及到的国际化或者本土化,大致包含 ...
- Unity Mesh、MeshFilter、MeshRenderer到底是个啥玩意
1.首先我们创建一个Cube在Unity中,在Hierarchy中点击右键3d Object ->Cube.然后查看右侧的Inspector窗口,如果没有的话,看顶部的Windows菜单,里面有 ...
- maven(一) maven到底是个啥玩意~
我记得在搞懂maven之前看了几次重复的maven的教学视频.不知道是自己悟性太低还是怎么滴,就是搞不清楚,现在弄清楚了,基本上入门了.写该篇博文,就是为了帮助那些和我一样对于maven迷迷糊糊的人. ...
- 怎么用python写名字_python中的__name__ 到底是个什么玩意?应该怎么用到它?
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:Python进击者 ( 想要学习Python?Pyth ...
最新文章
- 日记 [2007年02月03日]邮件退信问题的解决
- 一卡通变“一脸通” 人脸识别更新校园考勤方式
- CEdit 控件 更新内容的 方法(可以自动滚动至末尾)
- leetcode 567. 字符串的排列(滑动窗口)
- 为什么代码正确却没有爬虫的信息_为什么敷面膜没有效果?原来这才是敷面膜的正确步骤...
- setuptools安装_在Ubuntu 18.04系统上安装ERPNext ERP
- WampServer的配置
- 玩转文字!汉字海报的布局排版形式成功案例,给你灵感!
- 一步一步写算法(之哈夫曼树 下)
- c语言推箱子源代码及注释,求大神 解析推箱子源代码 要详细
- 衰减学习率真的有用吗?
- Linux中如何恢复rm命令误删除的文件之extundelete编译安装及使用
- 深度学习2.0-22.Keras高层接口之自定义层或网络
- 使用标尺工具获取某点的坐标
- 网络七层协议,一张图片告诉你
- 超好用笔记软件Typora安装教程
- Easy Excel
- 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记
- 求求你!别再考秒杀系统了!看完这篇怼回去 ~
- Pytest_fixture装饰器、调用fixture的三种方法、usefixtures与传fixture区别、fixture自动使用autouse=True
热门文章
- 蓝桥杯备赛 | 官方题库基础练习(含VIP试题)试题+答案(共33题)
- 多线程面试题Top50
- 使用 jQuery.i18n.properties 实现 Web 前端的国际化
- qq邮箱格式的Java代码_java mail qq邮箱配置 实例
- Mobvista亿级流量背后的云服务架构支撑
- EMQ 与 TDengine 达成战略合作协议
- win 10文件夹、资源管理器卡顿问题解决办法
- oracle1422,Oracle错误:数据泵导出时报错ORA-1422
- 工业机器人的6大应用场景
- 我在计算机课上画图的英语,在计算机中画图 课件.ppt