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

news/2024/11/21 1:25:16/

在这里插入图片描述

系列文章目录

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.ppmy.cn/news/1295395.html

相关文章

力扣(leetcode)第434题字符串中的单词数(Python)

434.字符串中的单词数 题目链接:434.字符串中的单词数 统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。 请注意,你可以假定字符串里不包括任何不可打印的字符。 示例: 输入: “Hello, my name is John” 输出: 5 解释: 这…

1、Excel工作场景和知识点总结

参考: 戴师兄–戴你玩转数据分析 Excel发挥战斗力的场景 地量级数据的存储 我们日常所用的各种数据表格,基本都以excel的.xlsx或者.xls格式进行存储。并且因为大家电脑上都有excel,这就使excel的通用性很高(我用excel做好一个表发给你&#x…

Python 面向对象之反射

Python 面向对象之反射 【一】概念 反射是指通过对象的属性名或者方法名来获取对象的属性或调用方法的能力反射还指的是在程序额运行过程中可以动态获取对象的信息(属性和方法) 【二】四个内置函数 又叫做反射函数 万物皆对象(整数、字符串、函数、模块、类等等…

0.9uA 低功耗低压差稳压器

一、基本概述 FM6215 系列采用 CMOS 工艺制造的高精度、低功耗低压差稳压器。该系列具有极低的静态电流, 输出电压 3.3v的产品静态功耗仅为 0.9uA(TYP),最大输出电流可达到 300mA。 产品采用 SOT23-5 封装,因此,该系列适用于需要高密度安装的应用场合&a…

【数值分析】高斯消元法,matlab实现

高斯消元法 A n n x b A_{n \times n}xb Ann​xb 步骤: 1. 列出增广矩阵 Z [ A ∣ b ] 2. 迭代 , j 1 , 2 , ⋯ , n Z 第 i 行的每个元素乘以 Z i − 1 , j Z i , j , i j 1 , j 2 , ⋯ , n Z 第 i 行减去第 j 行 , 消元 3. 回代 x i b i − ∑ j i 1 n …

【数据库原理】(9)SQL简介

一.SQL 的发展历史 起源:SQL 起源于 1970 年代,由 IBM 的研究员 Edgar F. Codd 提出的关系模型概念演化而来。初期:Boyce 和 Chamberlin 在 IBM 开发了 SQUARE 语言的原型,后发展成为 SQL。这是为了更好地利用和管理关系数据库。…

如何进行sql优化?

在日常工作中都避免不了要和各种SQL语句打交道,无论是开发还是后期维护,一条执行效率高的SQL语句都会对系统性能产生巨大影响。那么,如何进行有效的SQL优化呢?下面将为大家深入浅出地讲解SQL优化的各个方面: 1、了解数…

MYSQL篇--sql优化高频面试题

sql优化 1 如何定位及优化SQL语句的性能问题?创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因? 其实对于性能比较低的sql语句定位,最重要的也是最有效的方法其实还是看sql的执行计划,而对于mysql来说 它…