当前位置: 首页 > news >正文

ES6之Symbol

ES6中为我们新增了一个原始数据类型Symbol,让我为大家介绍一下吧!
Symbol它表示是独一无二的值
Symbol要如何创建
第一种创建方式:

    let sy = Symbol()

第二种创建方式:

    let sy = Symbol.for()

具体独一无二在哪呢?它们的地址不相同。

    let sy = Symbol("name")let sy1 = Symbol("name")console.log(sy === sy1) //false

但如果我们使用Symbol.for创建

    let sy = Symbol.for("name")let sy1 = Symbol.for("name")console.log(sy === sy1) // true

Symbol不能与其他数据进行运算

    let sy = Symbol()console.log(sy + 1) //报错console.log(sy > 1) //报错console.log(sy + "1") //报错

Symbol可以作用在哪呢?
用来定义对象的私有变量
如何写入对象?
第一种:

    let sy = Symbol("sy1")const obj = {}obj[sy] = "私有的"console.log(obj)

第二种:

    let sy = Symbol("sy1")const obj = {[sy] : "私有的"} console.log(obj)

第三种添加的键值:

    const obj = {sy : Symbol("私有的")} console.log(obj)

在这里插入图片描述
我们可以用keyFor来获取Symbol.for()创建的值

    let sy = Symbol.for("hello")console.log(Symbol.keyFor(sy))//hello

我们怎么获取呢?可以使用 对象[ ]的方法取到
记住取Symbol的值时,不能用点(.)取

//获取成功
console.log(obj[sy]) //私有的

我们用点(.)取值试一下,取到undefined

console.log(obj.sy) //undefined

我们该如何循环取到Symbol
我们用对象的for in方法试一试
由此可见,取不到Symbol

    let sy = Symbol("hello")const obj = {name:"张三",age:18,}obj[sy] = "私有的"for(let k in obj) {console.log(obj) //{name: '张三', age: 18, Symbol(hello): '私有的'}console.log(k) //name ageconsole.log(obj[k]) //张三 18}

我们使用getOwnPropertySymbols()

    let sy = Symbol("hello")const obj = {name:"张三",age:18    }obj[sy] = "私有的"let a = Object.getOwnPropertySymbols(obj)console.log(a)

在这里插入图片描述

感谢大家的阅读,如有不对的地方,可以向我指出,感谢大家!

相关文章:

  • FFmpegd的AVBSF
  • 学习Node.js与Webpack总结
  • C++之函数指针
  • java对二维数组进行排序
  • web服务器之——www服务器的基本配置
  • 学习JVM
  • 网络游戏APP备案|游戏
  • Android 消息分发机制解读
  • 机器学习-SVM(支持向量机)
  • HyperGCN代码复现
  • 软件运行原理 - 内存模型 - 栈内存
  • java-两个列表进行比较,判断那些是需要新增的、删除的、和更新的
  • 【亚马逊云科技】通过高性能低延迟对象存储 S3实现网站资源托管
  • 神秘的【Q*项目】强化学习算法: Q学习:用于学习最佳行动策略。 深度Q网络(DQN):结合深度学习和强化学习。
  • 【算法题】连续字母长度(js)
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 2017前端实习生面试总结
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • canvas 高仿 Apple Watch 表盘
  • CAP 一致性协议及应用解析
  • conda常用的命令
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • LeetCode29.两数相除 JavaScript
  • QQ浏览器x5内核的兼容性问题
  • SpiderData 2019年2月23日 DApp数据排行榜
  • vue自定义指令实现v-tap插件
  • 半理解系列--Promise的进化史
  • 大整数乘法-表格法
  • 猴子数据域名防封接口降低小说被封的风险
  • 欢迎参加第二届中国游戏开发者大会
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 解决iview多表头动态更改列元素发生的错误
  • 使用API自动生成工具优化前端工作流
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 通过几道题目学习二叉搜索树
  • 一起参Ember.js讨论、问答社区。
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 用 Swift 编写面向协议的视图
  • 原生JS动态加载JS、CSS文件及代码脚本
  • k8s使用glusterfs实现动态持久化存储
  • puppet连载22:define用法
  • ​2021半年盘点,不想你错过的重磅新书
  • ​低代码平台的核心价值与优势
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #Ubuntu(修改root信息)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (void) (_x == _y)的作用
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • *p++,*(p++),*++p,(*p)++区别?
  • .CSS-hover 的解释
  • .htaccess 强制https 单独排除某个目录
  • .htaccess配置重写url引擎
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET Core 通过 Ef Core 操作 Mysql