JavaScript数据类型- Symbol 详解

文章目录

    • 前言
    • 1.唯一性
    • 2. 描述
    • 3. 作为对象属性键
    • 4. 全局注册
    • 6. 不可变性
    • 7. 隐式转换

前言

Symbol是ES6新增内容,代表创建后独一无二且不可变的数据类型,它主要是为了解决可能出现的全局变量冲突的问题
在JavaScript发展的过程中,其中的ES6带来了一系列的新特性,其中之一就是Symbol。Symbol是一种特殊的原始数据类型,它提供了一种创建全局唯一标识符的方式,这对于避免命名冲突尤其有用。不同于传统的字符串或数字,每个Symbol都是独立且唯一的,即使它们具有相同的描述。这使得Symbol非常适合用于对象属性的键,从而避免了与其他属性键发生冲突的可能性。本文旨在深入探讨Symbol的各个方面,包括它的创建、使用方法以及与其他数据类型的交互方式,帮助更好地理解和利用这一特性。

1.唯一性

每次调用 Symbol() 都会返回一个新的、唯一的 Symbol 值

const sym1 = Symbol();
const sym2 = Symbol();
console.log(sym1 === sym2); // false

2. 描述

可以给 Symbol 提供一个可选的字符串参数作为描述,这有助于调试,但不会影响 Symbol 的唯一性

const sym = Symbol('mySymbol');
console.log(sym.toString()); // "Symbol(mySymbol)"

3. 作为对象属性键

Symbol 可以用作对象属性的键,并且不会与任何字符串键冲突

const key = Symbol('key');
const obj = {[key]: 'value'
};
console.log(obj[key]); // 'value'
console.log(obj['key']); // undefined

4. 全局注册

使用 Symbol.for(key) 可以创建一个全局唯一的 Symbol,如果之前已经存在相同的键,则返回已存在的 Symbol。

const sym1 = Symbol.for('foo');
const sym2 = Symbol.for('foo');
console.log(sym1 === sym2); // true

6. 不可变性

Symbol 是不可变的,一旦创建就无法改变其值。

7. 隐式转换

当尝试将 Symbol 转换成其他类型(如数字或字符串)时,会抛出 TypeError。不过,Symbol 可以通过 .toString() 或 .description 获得其字符串表示形式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/465034.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大数据学习 | kafka】kafka的偏移量管理

1. 偏移量的概念 消费者在消费数据的时候需要将消费的记录存储到一个位置,防止因为消费者程序宕机而引起断点消费数据丢失问题,下一次可以按照相应的位置从kafka中找寻数据,这个消费位置记录称之为偏移量offset。 kafka0.9以前版本将偏移量信…

基于梯度的快速准确头部运动补偿方法在锥束CT中的应用|文献速递-基于深度学习的病灶分割与数据超分辨率

Title 题目 A gradient-based approach to fast and accurate head motion compensation in cone-beam CT 基于梯度的快速准确头部运动补偿方法在锥束CT中的应用 01 文献速递介绍 锥束计算机断层扫描(CBCT)系统在灵活性方面比螺旋多排探测器计算机断…

语音识别ic赋能烤箱,离线对话操控,引领智能厨房新体验

一、智能烤箱产品的行业背景 随着科技的飞速发展,智能家居已经成为现代家庭的新宠。智能烤箱作为智能家居的重要组成部分,正逐渐从高端市场走向普通家庭。消费者对于烤箱的需求不再仅仅局限于基本的烘焙功能,而是更加注重其智能化、便捷化和…

qt QWizard详解

1、概述 QWizard是Qt框架中提供的一个功能强大的向导对话框类。它帮助用户逐步完成复杂的任务或流程,通过一系列页面组成的向导界面,实现了交互式和响应式的用户体验。QWizard可以应用于多种场景,如安装向导、配置向导、数据导入向导等&…

如何看待AI技术的应用场景:现状与未来的全面解析

人工智能(AI)正在以惊人的速度改变我们的世界。从医疗诊断到自动驾驶,从虚拟助手到金融分析,AI的应用场景正日益扩展,影响着几乎每个行业。然而,AI的广泛应用也引发了关于隐私、安全、伦理等多方面的讨论。…

ONLYOFFICE 8.2深度体验:高效协作与卓越性能的完美融合

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ONLYOFFICE 8.2 🔍引言📒1. ONLYOFFICE 产品简介📚2. 功能与特点🍁协作编辑 PDF🍂…

使用SQLark如何将Oracle迁移到达梦数据库

​ 以上对话源于某位负责数据库适配的 ISV 工程师,他正在将数据从 Oracle 迁移到某国产数据库中。像这样的基础问题,每天在各个适配群、各个社区不断出现,比如: Oracle 迁移到 DM 后,数据有乱码,达梦如何设…

Unity3D学习FPS游戏(9)武器音效添加、创建敌人模型和血条

前言:虽然已经实现了基本玩家操作,但是游戏运行起来并没有音效。既然是FPS游戏有了玩家和武器,肯定还得有敌人。本篇演示如何给武器添加音效和创建敌人。 武器音效添加和创建敌人 武器音效添加Audio Source代码控制 创建敌人目标敌人模型敌人…

【算法】Floyd多源最短路径算法

目录 一、概念 二、思路 三、代码 一、概念 在前面的学习中,我们已经接触了Dijkstra、Bellman-Ford等单源最短路径算法。但首先我们要知道何为单源最短路径,何为多源最短路径 单源最短路径:从图中选取一点,求这个点到图中其他…

Docker安装MongoDB详解(mongo.latest)

一、MongoDB介绍 MongoDB是一种基于分布式文件存储的数据库,使用C语言开发,旨在为Web应用提供可扩展且高性能的数据存储解决方案。作为一种介于关系数据库和非关系数据库之间的技术,MongoDB具有强大的功能和高效的性能,特别适用于…

金箍棒变化-第15届蓝桥杯国赛Scratch初/中级组真题第1题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第193讲。 如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,…

简单的 docker 部署ELK

简单的 docker 部署ELK 这是我的运维同事部署ELK的文档,我这里记录转载一下 服务规划 架构: Filebeat->kafka->logstash->ES kafka集群部署参照: kafka集群部署 部署服务程序路径/数据目录端口配置文件elasticsearch/data/elasticsearch9200/data/elas…

Unity XR Interaction Toolkit 开发教程(3)快速配置交互:移动、抓取、UI交互【3.0以上版本】

获取完整课程以及答疑,工程文件下载: https://www.spatialxr.tech/ 视频试看链接: 3.快速配置交互:移动、抓取、UI交互【Unity XR Interaction Toolkit 跨平台开发教程】(3.0以上版本) 系列教程专栏&…

深度体验SCNet超算平台:SCNet「AI跃升季」·谁是下一个“AI”跃人?

平时做大模型训练的时候总是苦于没有服务器资源来做微调实验,于是这次深度体验了一下SCNet超算平台。 SCNet超算平台是一个超算互联网计算服务平台,有着更大更全更专业的超级算力。显卡从异构加速卡到A800都有。 本次我尝试了大模型的推理和微调。 第一…

求助帖【如何学习核磁共振的原理】

最近提前进组了 我完全不懂磁共振的相关知识 想问问各位大佬有没有推荐的学习路线 或者是学习资料、论坛都可以的(我做的方向是磁共振成像技术) 老师给了一本书,但是有点看不懂,全英文的 叫Principles Of Magnetic Resonance …

MySQL查询where中包含多个in条件问题

示例: select * from x_table where a in (1,2,3) and b in (4,8) 上面这种查询方法,如果可以通过a和b唯一确定一条数据,但a和b列可以有相同值时,会造成查询数据不准确。 验证: 假设有以下数据(手机号为…

HiveSQL 中判断字段是否包含某个值的方法

HiveSQL 中判断字段是否包含某个值的方法 在 HiveSQL 中,有时我们需要判断一个字段是否包含某个特定的值。下面将介绍几种常用的方法来实现这个功能。 一、创建示例表并插入数据 首先,我们创建一个名为employee的表,并插入一些示例数据&am…

python-读写Excel:openpyxl-(4)下拉选项设置

使用openpyxl库的DataValidation对象方法可添加下拉选择列表。 DataValidation参数说明: type: 数据类型("whole", "decimal", "list", "date", "time", "textLength", "custom"…

求平面连接线段组成的所有最小闭合区间

这个功能确实非常实用,我在过去开发地面分区编辑器时就曾应用过这一算法。最近,在新产品的开发中再次遇到了类似的需求。尽管之前已经实现过,但由于长时间未接触,对算法的具体细节有所遗忘,导致重新编写时耗费了不少时…

springboot - 定时任务

定时任务是企业级应用中的常见操作 定时任务是企业级开发中必不可少的组成部分,诸如长周期业务数据的计算,例如年度报表,诸如系统脏数据的处理,再比如系统性能监控报告,还有抢购类活动的商品上架,这些都离不…