Symbol的理解和使用

2023-11-20

Symbol的诞生,也就是Symbol存在的意义

之前我们的对象属性的数据类型都是字符串,没有其他的,所以会导致属性名的重复,导致属性值被覆盖的情况。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法,在添加的操作就很容易覆盖原有的方法。所以需要一个独一无二的数据类型来完成这个使命。所以Symbol出来支持大局

Symbol的介绍

1.唯一性

Symbol这个英文单词表示‘唯一’,没错它是javascript的第七中数据类型,表示它是唯一的。
创建一个Symbol类型是不需要new操作符。否则会报错。因为生成Symbol是一个原始类型的值,不是对象。直接let s = Symbol()

 let s = Symbol('a')
        let ss = Symbol('a')
        console.log(s == 's');
        //false

通哟上面例子的比较,我们对Symbol的唯一性,有了一定的了解,也就是当你创建了一个Symbol数据后,那么你就是独一无二的存在。

数据类型的修饰

有人会好奇Symbol(‘a’)里面的参数a又是怎么回事,字符串a表示一种修饰,对你当前创建Symbol类型的一种修饰,作为区分使用,否则当你创建多个Symbol数据时,容易混淆

与其他数据类型之前的转化

Symbol不能用四则运算进行操作,否则会报错,它只能用显示的方式转为字符串和布尔值,即:

String(Symbol())/Boolean(Symbol())
作为对象属性
作为对象的属性时,注意以下三种方式来书写

第一种写法

let mySymbol = Symbol()
let a = {}
a[mySymbol] = 'Hello'

第二在写法

let mySymbol = Symbol()
let a = {
 [mySymbol]: 'Hello'
}

第三种写法

let mySymbol = Symbol()
let a = {}
Object.defineProperty(a,mySymbol,{value: 'Hello'})

以上打印a[mySymbol]都是Hello

对象属性的遍历

以上说了对象属性的创建,但是我们要格外的注意,Symbol作为属性名,该属性不会出现在for…in,for…of循环中,也不会被Object.keys(),Object.getOwnPropertyNames(),JSON.stringify()返回。所以我们可以用Object.getOwnPropertySymbols方法,获取指定对象的所有Symbol属性名
如果一个对象里面有字符串属性又有Symbol的属性,那必须要适应新API方法:Reflect.ownKeys(),这个方法就可以返回对象所有的属性,也就是字符串属性和Symbol属性。

let person = {
            name: '小明',
            age: 12,
            [Symbol('level')] : 'A'
        }
        console.log(Object.keys(person));
         /*
        0: "name"
        1: "age"
        */
        console.log(Object.getOwnPropertySymbols(person));
        /*
        0: "name"
        1: "age"
        */
        console.log(Reflect.ownKeys(person));
        /*
        0: "name"
        1: "age"
        2: Symbol(level)
        */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symbol的理解和使用 的相关文章

随机推荐

  • 【微信小程序】数组排序以及去重问题详解

    微信小程序中 通常有一些数据 是存在前端缓存里的 但是这个数据如果是没有处理过 需要动态处理的时候 数据就会有问题 所以 提供一些数据的几种处理方式 二维数组排序 var arr1 new Array arr1 中猫猫er E7555大号
  • FineReport 帆软实战一 帆软概述及软件下载

    前言 公司近期引进帆软报表替换原先的润乾报表 以提供更为强大的报表处理能力 因此我也开始从零学习帆软报表 帆软报表报表分为FineReport和FineBI Report可以理解为面向开发人员的报表设计器 用于开发复杂类型的报表 需要开发人
  • 计算机中的二进制表示-4和5

    十进制 二进制 5 00000000 00000000 00000000 00000101 4 11111111 11111111 11111111 11111100 负数的二进制如何得出 相信正数的二进制表示大家都懂 但是这个 4怎么来的
  • 一文教你如何在HBuilderX中使用模拟器开发调试App

    一文教你如何在HBuilderX中使用模拟器开发调试App 第一步下载HBuilderX 第二步 下载一个模拟器 这里我选择的是网易出品的mumu模拟器 第三步 打开上面安装的两个软件 接着在hbx里运行到模拟器 如下图所示 如果和图片中一
  • 从12306验证码看人工智能未来发展

    事件背景 最近12306对登陆验证过程进行了升级 让很多抢票软件失效 也引起众多网友的热议 如图 用户在登陆时需要选择和题目给出的描述相同的图片 新的验证方式推出后 不少网友也在网上发表看法 大部分网友表示此举很给力 黄牛抢票软件失效了 对
  • mysql dump 导出表_[译文]MySQL中快速逻辑备份一张单独的表

    逻辑备份在跨云环境的数据迁移和表级恢复中非常有用 8 0 22的MySQL shell引入了两个新的实用程序util dumpTable 和util exportTable 用于从MySQL中导出单独的表 在8 0 22之前 无法使用MyS
  • 电脑提示vcomp140.dll无法继续执行代码

    电脑提示vcomp140 dll无法继续执行代码怎么办 vcomp140 dll是电脑系统系统重要的动态链接库文件 丢失或者损坏的话 会导致电脑很多软件跟游戏无法打开运行 需要怎么修复 详细困扰着不少小伙伴 小编今天就把教程分享给大家 修复
  • 2.0生命周期 fabric java 链码安装

    2 0生命周期 fabric java 链码安装 步骤
  • ATT&CK红队评估实战靶场-1(全网最细)

    声明 该系列文章首发于公众号 Y1X1n安全 转载请注明出处 本公众号所分享内容仅用于网安爱好者之间的技术讨论 所有渗透及工具的使用都需获取授权 禁止用于违法途径 否则需自行承担 本公众号及作者不承担相应的后果 ATT CK红队评估实战靶场
  • 列表 元组和字典

    1 列表 1 1列表的循环变量 for循环 while循环 1 2列表常见的操作 1 2 1在列表增加元素 append方法 extend方法 insert方法 append方法 在列表的末尾新增元素 extend方法 将一个列表中的元素全
  • Golang协程与通道整理

    协程goroutine 不由OS调度 而是用户层自行释放CPU 从而在执行体之间切换 Go在底层进行协助实现 涉及系统调用的地方由Go标准库协助释放CPU 总之 不通过OS进行切换 自行切换 系统运行开支大大降低 通道channel 并发编
  • 求一个数组的最大值最小值及其下标

    求一个数组的最大值最小值及其下标 思路 假定一个数为最大值 如果有个数比假定的最大值还大 那么该数就为最大值 最小值同理 使用for循环 public class MaxMin public static void main String
  • java 对象序列化磁盘_java对象的序列化以及反序列化详解

    一 概念 序列化 把创建出来的对象 new出来的对象 以及对象中的成员变量的数据转化为字节数据 写到流中 然后存储到硬盘的文件中 反序列化 可以把序列化后的对象 硬盘上的文件中的对象数据 读取到内存中 然后就可以直接使用对象 这样做的好处是
  • Could not resolve dependencies for project

    ERROR Failed to execute goal on project open common Could not resolve dependencies for project com wt open open common j
  • JavaBean的Scope属性

    Scope 属性代表了Javabean对象的生存时间 可以是page request session和application中的一个 它们分别代表了JavaBean的四种不同生命周期和四种不同的使用范围 page的生命周期和作用范围是4种类
  • 【大学生软件测试基础】白盒测试 - 控制流图 - 01

    任务1 画出程序流程图 任务2 画出控制流图 任务3 根据程序环形复杂度的计算公式 求出程序路径集合中的独立路径数目 任务4 根据环形复杂度的计算结果 源程序的基本路径集合中有多少条独立路径 任务5 设计测试用例 1 程序流程图 2 控制流
  • git资料

    IDEA中Git的使用 https www cnblogs com javabg p 8567790 html 如何用git将项目代码上传到github https blog csdn net laozitianxia article de
  • Centos 7 大硬盘分区(>2TB) - parted & xfs

    Centos 7 针对超过2T的大硬盘 采用parted分区 1 运行parted命令 进入parted界面后 运行p打印已有分区信息 找到前一个分区终止点 如 2 2028kb 51 2GB xfs 其至终点应为51 2GB 运行mkpa
  • RabbitMQ高级特性(四):RabbitMQ之TTL(存活时间/过期时间)

    RabbitMQ高级特性 四 RabbitMQ之TTL 存活时间 过期时间 TTL 全称 Time To Live 存活时间 过期时间 当消息到达存活时间后 还没有被消费 会被自动清除 RabbitMQ可以对消息设置过期时间 也可以对整个队
  • Symbol的理解和使用

    Symbol的诞生 也就是Symbol存在的意义 之前我们的对象属性的数据类型都是字符串 没有其他的 所以会导致属性名的重复 导致属性值被覆盖的情况 比如 你使用了一个他人提供的对象 但又想为这个对象添加新的方法 在添加的操作就很容易覆盖原