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

news2024/9/29 17:28:13

在这里插入图片描述

系列文章目录

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可以用于实现自定义迭代器。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

码农好沟通吗?

码农好沟通吗?这个标题本身就是一个问题,个人认为 找对沟通的对象,是保证有效沟通的前提和基础 ,很多时候都能听见程序员和客户沟通差点把客户气死,理解不到客户的需求点。因为相互间的知识体系都不一样,如…

visi 各版本安装指南

visi下载链接 https://pan.baidu.com/s/1WNksdiChCPebPvRRSVakOA?pwd0531 1.鼠标右键【visi2021(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)选择【解压到 visi2021(64bit)】。 2.打开解压后的文件夹,鼠标右击【Setup VISI 2…

Ubuntu软件和vmware下载

https://cn.ubuntu.com/download/desktop VMware 中国 - 交付面向企业的数字化基础 | CN

Linux Ubuntu 20.04.6 Intel WiFi6 Ax411 1690i Ax1690i Killer 解决无线网卡识别不出来问题

项目场景: 网卡型号:英特尔 Killer™ Wi-Fi 6E AX1690 i/s ubuntu 版本 uname -a Linux kuanli 5.15.0-91-generic #101~20.04.1-Ubuntu SMP Thu Nov 16 14:22:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux cat /proc/version Linux version 5.15.0-9…

注册 Mongodb 官网个人账号

上文 Mongodb基础介绍与应用场景我们简单说了一下 Mongodb 的场景 那么 我们先在他的官网创建一个个人账号 我们先访问官网 https://www.mongodb.com/zh-cn 这里 我们需要注册一下 这里 我们按要求填写信息 然后 点击下面创建账户 然后 点击下面创建账户 然后 他会要求我们邮…

三维地下管线建模工具MagicPipe3D V3.3发布

经纬管网建模系统MagicPipe3D V3.3 持续更新,欢迎下载试用:http://www.magic3d.net 1、发布MagicPipe3D宣传操作视频, 2、发布MagicPipe3D数据规格说明, 3、更新使用手册到3.3.0版本, 4、增加支持属性字段中文, 5、增加支持附属物方…

5.云原生安全之kubesphere应用网关配置域名TLS证书

文章目录 cloudflare配置使用cloudflare托管域名获取cloudflare API Token在cloudflare中配置SSL/TLS kubesphere使用cert-manager申请cloudflare证书安装证书管理器创建Secret资源创建cluster-issuer.yaml创建cert.yaml申请证书已经查看申请状态 部署harbor并配置ingress使用证…

【论文解读】基于神经辐射场NeRF的像素级交互式编辑(Seal-3D)

来源:投稿 作者:橡皮 编辑:学姐 论文链接:https://arxiv.org/pdf/2307.15131 项目主页:https://windingwind.github.io/seal-3d/ 摘要: 随着隐式神经表征或神经辐射场(NeRF)的普及…

docker部署simpleDocker

1,安装docker,请参考 linux安装docker 2,安装docker-compose,请参考 Docker-Compose 3,安装simpleDocker 准备docker-compose.yml文件 version: 3 services:redis:container_name: redisimage: redis:latestweb:conta…

算法基础之二分与前缀和 day 6

文章目录 二分第一类第二类 前缀和原题链接题目描述输入格式输出格式数据范围输入样例:输出样例: 题目分析示例代码 二分 二分法是我们在高中数学就学习过的一种思想,他也是一种效率较高的查找算法,在编写代码的过程中&#xff0…

关于“Python”的核心知识点整理大全64

目录 20.2.15 确保项目的安全 settings.py 20.2.16 提交并推送修改 20.2.17 创建自定义错误页面 1. 创建自定义模板 500.html settings.py settings.py 注意 views.py 20.2.18 继续开发 往期快速传送门👆(在文章最后)&#xff1a…

基于 Python+Neo4j+医药数据,构建了一个知识图谱的自动问答系统

知识图谱是目前自然语言处理的一个热门方向。目前知识图谱在各个领域全面开花,如教育、医疗、司法、金融等。 本项目立足医药领域,以垂直型医药网站为数据来源,以疾病为核心,构建起一个包含7类规模为4.4万的知识实体,…

16.顺子日期(14)

题目 public class Main {public static boolean isLegal(String date) {int l 0;int n date.length();while(l<(n-3)) {int t1 (int)Integer.valueOf(date.substring(l,l1));int t2 (int)Integer.valueOf(date.substring(l1,l2));int t3 (int)Integer.valueOf(date.s…

案例介绍|钡铼助力2023年全国职业院校技能大赛工业网络智能控制与维护赛项

如今&#xff0c;越来越多的企业开始意识到数字制造和工业物联网已经成为工业自动化中大规模生产的核心驱动力。这其中&#xff0c;工业网络作为基础设施&#xff0c;是实现工厂设备联网与数据采集&#xff0c;建设数字工厂的基础和前提&#xff0c;甚至成为关乎数字工厂能否真…

C++ 类的内存分布

文章目录 1 . 前言2 . 无继承&#xff0c;无虚函数3 . 无继承&#xff0c;有虚函数4 . 单一继承&#xff0c;无虚函数5 . 单一继承&#xff0c;有虚函数&#xff0c;虚析构6 . 多重继承7 . 菱形继承8 . 虚拟继承9 . 总结 【极客技术传送门】 : https://blog.csdn.net/Engineer_…

CentOS:docker容器日志清理

1.先查看磁盘空间 df -h 2.找到容器的containerId-json.log文件,并清理 find /var/lib/docker/containers/ -name *-json.log |xargs du -sh 3、可以根据需求清理对应日志也可以清理数据大的日志 $ cat /dev/null > /var/lib/docker/containers/dbaee0746cc6adad3768b4ef…

Java快速排序希尔排序归并排序

快速排序算法 快速排序的原理&#xff1a;选择一个关键值作为基准值。比基准值小的都在左边序列&#xff08;一般是无序的&#xff09;&#xff0c;比基准值大的都在右边&#xff08;一般是无序的&#xff09;。一般选择序列的第一个元素。 一次循环&#xff1a;从后往前比较&…

软件测试|什么是Python构造方法,构造方法如何使用?

构造方法&#xff08;Constructor&#xff09;是面向对象编程中的重要概念&#xff0c;它在创建对象时用于初始化对象的实例变量。在Python中&#xff0c;构造方法是通过特殊的名称__init__()来定义的。本文将介绍Python构造方法的基本概念、语法和用法。 什么是构造方法&…

Qt添加资源文件

ui->setupUi(this);//1. 使用本地文件&#xff1a;ui->actionasdasdas->setIcon(QIcon("本地绝对路径"));ui->actiona1->setIcon(QIcon("C:/Users/满满/Desktop/output/picture/1.jpg"));//2. 使用资源文件&#xff1a;ui->actionasdasd…

二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)

讲了这么多数据结构相关的知识(可以看我的数据结构文章专栏): 抓紧刷题巩固一下了 目录 1.单值二叉树 题目描述 思路1 代码1 思路2 代码2 2.相同的树 题目描述 思路 代码 3.二叉树的前序遍历 代码 思路 1.单值二叉树 965. 单值二叉树 - 力扣&#xff08;LeetCod…