TypeScript 从入门到进阶之基础篇(四) symbol类型篇

在这里插入图片描述

系列文章目录

TypeScript 从入门到进阶系列

  1. TypeScript 从入门到进阶之基础篇(一) ts基础类型篇
  2. TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇
  3. TypeScript 从入门到进阶之基础篇(三) 元组类型篇
  4. TypeScript 从入门到进阶之基础篇(四) symbol类型篇
    持续更新中…

文章目录

  • 系列文章目录
  • TypeScript 从入门到进阶系列
  • 前言
  • 一、symbol类型的使用
  • 二、symbol类型的使用场景
    • 1. 用作对象属性名:
    • 2. 用作常量:
    • 3. 用作私有属性或方法名:
  • 三、symbol类型的使用注意事项


前言

前面我们了解了 基础类型、引用类型、元组类型的使用,本章我们来了解TypeScript中如何使用symbol类型,当然 symbol类型要是属于JavaScript,可能有很多同学还不知道symbol

symbol类型 是 ES6 引入的一种新的原始数据类型,用来表示唯一的、不可变的值。Symbol值通过Symbol()函数生成,每个Symbol值都是唯一的,可以用于对象的属性名,从而避免属性名冲突的问题。自ECMAScript 2015起,symbol成为了一种新的原生类型。

一、symbol类型的使用

要创建一个Symbol值,可以使用Symbol构造函数,创建时可以穿一个唯一参数作为唯一标识。

注意:参数只能是number类型string 类型

//正确使用
const mySymbol = Symbol();
const mySymbol =Symbol('我是唯一标识');

二、symbol类型的使用场景

Symbol类型在JavaScript中是一种新的数据类型,它的主要用途是作为对象属性的唯一标识符。以下是一些Symbol类型的使用场景:

1. 用作对象属性名:

Symbol类型的值可以作为对象的属性名,这样可以确保属性的唯一性,避免属性名冲突的问题。

const obj = {};
const symbol1 = Symbol('foo');
const symbol2 = Symbol('foo');

obj[symbol1] = 'value1';
obj[symbol2] = 'value2';

console.log(obj[symbol1]); // 'value1'
console.log(obj[symbol2]); // 'value2'

//也可以这样使用
const symbol3= Symbol();

let objMap={
 [symbol3]:'我是值'
}

console.log(objMap[symbol3]); // "我是值"

2. 用作常量:

Symbol类型的值是唯一且不可变的,可以作为常量使用。在这种情况下,使用相同的Symbol值可以确保常量的唯一性。

const LOG_LEVEL = {
  DEBUG: Symbol('debug'),
  INFO: Symbol('info'),
  ERROR: Symbol('error')
};

function log(level) {
  if (level === LOG_LEVEL.DEBUG) {
    console.log('Debug message');
  } else if (level === LOG_LEVEL.INFO) {
    console.log('Info message');
  } else if (level === LOG_LEVEL.ERROR) {
    console.log('Error message');
  }
}

log(LOG_LEVEL.INFO); // 'Info message'

3. 用作私有属性或方法名:

Symbol类型的值不会被默认遍历到对象的属性列表中,这使得它可以用作私有属性或方法名,不会被外部访问到。

const obj = {};
const privateProperty = Symbol('private');

obj[privateProperty] = 'private value';

console.log(obj[privateProperty]); // 'private value'
console.log(obj.privateProperty); // undefined

需要注意的是,Symbol类型的值不是字符串,虽然可以给Symbol传递一个描述参数,但描述参数只是作为标识符的可读性提示,不会影响Symbol的唯一性。

三、symbol类型的使用注意事项

使用symbol类型时有一些注意事项:

  1. Symbol是一种原始数据类型,可以用作对象属性的唯一标识符。每个symbol都是唯一且不可变的,不同于字符串类型的属性名可以重复。

  2. Symbol类型的变量不能通过直接访问来获取它们的值,因为它们没有固定的名称。相反,可以使用变量名和Symbol的描述符作为参数访问变量。例如:console.log(mySymbol)。

  3. 可以使用Symbol类型作为对象属性名。这样可以确保属性的唯一性。例如:const obj = {[mySymbol]: “value”}。

  4. Symbol类型的变量可以作为对象的私有属性,因为它的值不会被意外修改或覆盖。

  5. Symbol类型的变量在使用JSON.stringify()方法时会被忽略。这是因为JSON.stringify()默认情况下只序列化对象的可枚举属性,而Symbol类型的属性默认为不可枚举。

  6. 可以使用Object.getOwnPropertySymbols()方法来获取对象中所有的Symbol属性。

  7. Symbol类型的变量可以作为迭代器的唯一键,例如Symbol.iterator可以用于实现自定义迭代器。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql之视图执行计划

一.视图 1.1视图简介 1.2 创建视图 1.3视图的修改 1.4视图的删除 1.5查看视图 二.连接查询案例 三.思维导图 一.视图 1.1视图简介 虚拟表,和普通表一样使用 MySQL中的视图(View)是一个虚拟表,其内容由查询定义。与实际表不…

解决 POST http://x.x.x.x:8000/aaa/ net::ERR_CONNECTION_TIMED_OUT

记录一下我遇到的问题和解决办法 我的项目前后端分离,在前端用的vue访问后端时连接不上后端,一切操作都触发不了后端,数据也传不到后端去; 原因:url有问题,url地址写的不是本机,所以导致连接超…

OpenCV的安装和vscode的配置

在图像处理领域,OpenCV的使用是必不可少的,这里介绍一下OpenCV的安装及其在vscode中的配置 1.OpenCV的安装 (1)安装依赖 sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavc…

vue2中vuex详细使用

1.安装 说明:也就是版本号,一般vue2安装vuex3。 npm i vuex3.6.2 2.搭建架子 执行流程如下: 初始化状态:在state对象中定义了一个名为message的属性,并将其初始值设置为"启动"。 定义变更函数&#xff08…

leetcode 每日一题 2023年12月30日 一周中的第几天

题目 给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。 输入为三个整数:day、month 和 year,分别表示日、月、年。 您返回的结果必须是这几个值中的一个 {"Sunday", "Monday", "Tuesday", &qu…

pytorch集智-2单车预测器

完整代码在个人主页简介链接pytorch路径下可找到 1 单车预测器1.0 1.1 人工神经元 对于sigmoid函数来说,w控制函数曲线的方向,b控制曲线水平方向位移,w控制曲线在y方向的幅度 1.2 多个人工神经元 模型如下 数学上可证,有限神经…

[大厂实践] 无停机迁移大规模关键流量(下)

在系统升级、迁移的过程中,如何验证系统逻辑、性能正确无误,是一个很大的挑战。这一系列介绍了Netflix通过重放流量测试解决这一挑战的实践。原文: Migrating Critical Traffic At Scale with No Downtime — Part 2 想象一下,你被心爱的Netf…

【操作系统xv6】学习记录5--实验1 Lab: Xv6 and Unix utilities

ref:https://pdos.csail.mit.edu/6.828/2020/xv6.html 实验:Lab: Xv6 and Unix utilities 环境搭建 实验环境搭建:https://blog.csdn.net/qq_45512097/article/details/126741793 搭建了1天,大家自求多福吧,哎。~搞环境真是折磨…

浅谈 JVM 类加载过程

🚗🚗🚗今天给大家分享的是HTTPS加密的工作过程。 清风的CSDN博客 🛩️🛩️🛩️希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! ✈️✈…

SQL Server从0到1——写shell

xp_cmdshell 查看能否使用xpcmd_shell; select count(*) from master.dbo.sysobjects where xtype x and name xp_cmdshell 直接使用xpcmd_shell执行命令: EXEC master.dbo.xp_cmdshell whoami 发现居然无法使用 查看是否存在xp_cmdshell: EXEC…

如何在群晖7.2中运行WPS Office镜像容器并使用固定地址公网访问

文章目录 1. 拉取WPS Office镜像2. 运行WPS Office镜像容器3. 本地访问WPS Office4. 群晖安装Cpolar5. 配置WPS Office远程地址6. 远程访问WPS Office小结 7. 固定公网地址 wps-office是一个在Linux服务器上部署WPS Office的镜像。它基于WPS Office的Linux版本,通过…

数据结构与算法教程,数据结构C语言版教程!(第二部分、线性表详解:数据结构线性表10分钟入门)九

第二部分、线性表详解:数据结构线性表10分钟入门 线性表,数据结构中最简单的一种存储结构,专门用于存储逻辑关系为"一对一"的数据。 线性表,基于数据在实际物理空间中的存储状态,又可细分为顺序表&#xff…

解决pip安装第三库echarts报错:Package would be ignored而安装失败的问题

现象: 尝试了很多方法都没解决 ,最后终于突然灵光一闪找到原因(我这是python虚拟环境,创建的时候会自动升级pip) 原因: pip版本过高! 想不到是这原因吧! 解决办法:手动…

主线程退出后子线程是否还会正常运行?

问题: 父子线程的关系 今天突然有感而发, 想要来探讨一下主线程和子线程之间的关系。 例一:子线程执行时间较父线程慢 public class ThreadTest {public static void main(String[] args) {// 测试主线程 和 子线程Thread sonThread new …

STM32 HAL库定时器触发DMA并口数据传输

代码目的: STM32与FPGA通讯,通过8位并口线进行通讯,16byte的数据在10us之内通过8位并口数据线传给FPGA,FPGA读取该数据。 HAL库设置说明: 时钟采用80MHz,由于16byte的数据要在10us之内传完,那…

《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(8)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(7) 2.2 HOST主桥 MPC8548处理器的拓扑结构如图2-2所示: 2.2.2 存储器域地址空间到PCI总线域地址空间的转换 MPC8548处理器使用ATMU&#xff…

协程池与新脚本语言

今天的主人公名为——Melang。 这是一款使用C语言开发的“新”的脚本语言,然而其已经默默问世了6年之久。 下面笔者就带你走进Melang world。 What is Melang Melang是一款协程并发脚本语言。它是一款解释型,而非编译型语言。 在Melang中&#xff…

计算机网络期末知识汇总

一、计算机网络概述 1.Internet 的中文译名并不统一。 现有的 Internet 译名有两种: 因特网,这个译名是全国科学技术名词审定委员会推荐的,但却长期未得 到推广; 互联网,这是目前流行最广的、事实上的标准译名。现…

如何在 iPhone 上检索已删除的短信:6个有效方法分享

您是否错误地删除了 iPhone 上的重要短信?或者您可能删除了“消息”应用程序中的整个对话并想将其恢复?无论您的情况如何,有一些数据恢复方法可以帮助您恢复 iPhone 上已删除的邮件。 在本文中,我们将介绍在 iPhone 上恢复丢失、…

大数据 MapReduce如何让数据完成一次旅行?

专栏上一期我们聊到MapReduce编程模型将大数据计算过程切分为Map和Reduce两个阶段,先复习一下,在Map阶段为每个数据块分配一个Map计算任务,然后将所有map输出的Key进行合并,相同的Key及其对应的Value发送给同一个Reduce任务去处理…