Young Kbt blog Young Kbt blog
首页
  • java基础

    • Java基础
    • Java集合
    • Java反射
    • JavaJUC
    • JavaJVM
  • Java容器

    • JavaWeb
  • Java版本新特性

    • Java新特性
  • SQL 数据库

    • MySQL
    • Oracle
  • NoSQL 数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka
  • 进阶服务

    • Nginx
  • Spring
  • Spring Boot
  • Spring Security
  • 设计模式
  • 算法
  • 知识
  • 管理

    • Maven
    • Git
  • 部署

    • Linux
    • Docker
    • Jenkins
    • Kubernetes
  • 进阶

    • TypeScript
  • 框架

    • React
    • Vue2
    • Vue3
  • 轮子工具
  • 项目工程
  • 友情链接
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
    • Vue2-Admin (opens new window)
    • Vue3-Admin(完善) (opens new window)
GitHub (opens new window)

Shp Liu

朝圣的使徒,正在走向编程的至高殿堂!
首页
  • java基础

    • Java基础
    • Java集合
    • Java反射
    • JavaJUC
    • JavaJVM
  • Java容器

    • JavaWeb
  • Java版本新特性

    • Java新特性
  • SQL 数据库

    • MySQL
    • Oracle
  • NoSQL 数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka
  • 进阶服务

    • Nginx
  • Spring
  • Spring Boot
  • Spring Security
  • 设计模式
  • 算法
  • 知识
  • 管理

    • Maven
    • Git
  • 部署

    • Linux
    • Docker
    • Jenkins
    • Kubernetes
  • 进阶

    • TypeScript
  • 框架

    • React
    • Vue2
    • Vue3
  • 轮子工具
  • 项目工程
  • 友情链接
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
    • Vue2-Admin (opens new window)
    • Vue3-Admin(完善) (opens new window)
GitHub (opens new window)
  • 超文本标记语言 - Html

  • 解释编程语言 - JavaScript

  • JS 超集语言 - TypeScript

    • TypeScript - 介绍
    • TypeScript - 安装和使用
    • TypeScript - 基本类型
    • TypeScript - 编译和配置
    • TypeScript - 文件打包
    • TypeScript - 接口
    • TypeScript - 函数
    • TypeScript - 类
    • TypeScript - 泛型
    • TypeScript - 类型推断
    • TypeScript - 高级类型
    • TypeScript Office - 入门
    • TypeScript Office - 常用类型
    • TypeScript Office - 类型缩小
    • TypeScript Office - 更多函数
    • TypeScript Office - 对象类型
    • TypeScript Office - 类型操纵
    • TypeScript Office - 类
    • TypeScript Office - 模块
    • TypeScript Office - 变量声明
    • TypeScript Office - 类型推断
    • TypeScript Office - 枚举
    • TypeScript Office - 公共类型
    • TypeScript Office - Symbols
      • Symbols 介绍
      • unique symbol
      • 知名的 Symbols
        • Symbol.hasInstance
        • Symbol.isConcatSpreadable
        • Symbol.iterator
        • Symbol.match
        • Symbol.replace
        • Symbol.search
        • Symbol.species
        • Symbol.split
        • Symbol.toPrimitive
        • Symbol.toStringTag
        • Symbol.unscopables
    • TypeScript Office - 类型兼容性
    • TypeScript Office - 迭代器和生成器
    • TypeScript Office - 装饰器
    • TypeScript Office - JSX
    • TypeScript Office - 混入
    • TypeScript Office - 三斜线指令
    • TypeScript Office - 模块进阶
    • TypeScript Office - 模块解析
    • TypeScript Office - 命名空间
    • TypeScript Office - 命名空间与模块
    • TypeScript Office - 声明合并
  • 界面构建框架 - React

  • 渐进式框架 - Vue2

  • 渐进式框架 - Vue3

  • 前端
  • JS 超集语言 - TypeScript
Young Kbt
2022-09-14
目录

TypeScript Office - Symbols

  • Symbols 介绍
  • unique symbol
  • 知名的 Symbols
    • Symbol.hasInstance
    • Symbol.isConcatSpreadable
    • Symbol.iterator
    • Symbol.match
    • Symbol.replace
    • Symbol.search
    • Symbol.species
    • Symbol.split
    • Symbol.toPrimitive
    • Symbol.toStringTag
    • Symbol.unscopables

# Symbols 介绍

从 ECMAScript 2015 开始,symbol 是一种原始的数据类型,就像 number 和 string 一样。

symbol 值是通过调用 Symbol 构造函数创建的。

let sym1 = Symbol();
let sym2 = Symbol("key"); // 可选的字符串 key
1
2

Symbols 是不可改变的,而且是独一无二的。

let sym2 = Symbol("key");
let sym3 = Symbol("key");
sym2 === sym3; // false, symbols 是唯一的
1
2
3

就像字符串一样,Symbols 可以被用作对象属性的键。

const sym = Symbol();
let obj = {
    [sym]: "value",
};
console.log(obj[sym]); // "value"
1
2
3
4
5

Symbols 也可以与计算属性声明结合起来,以声明对象属性和类成员。

const getClassNameSymbol = Symbol();
class C {
    [getClassNameSymbol]() {
        return "C";
    }
}
let c = new C();
let className = c[getClassNameSymbol](); // "C"
1
2
3
4
5
6
7
8

# unique symbol

为了能够将 symbols 作为唯一的字面符号,我们提供了一个特殊的类型 unique symbol。unique symbol 是 symbol 的一个子类型,只在调用 Symbol() 或 Symbol.for() 或明确的类型注释时产生。这种类型只允许在常量声明和只读静态属性中使用,为了引用一个特定的唯一符号,你必须使用 typeof 操作符。每个对唯一符号的引用都意味着一个完全独特的身份,它与一个给定的声明相联系。

declare const sym1: unique symbol;
// sym2 只能是一个常数参考。
let sym2: unique symbol = Symbol();
// Ⓧ 类型为 "唯一符号 "的变量必须是 "const"类型。
// 运行正确--指的是一个独特的 symbol,但其身份与 'sym1' 相联系。
let sym3: typeof sym1 = sym1;
// 也是正确的
class C {
    static readonly StaticSymbol: unique symbol = Symbol();
}
1
2
3
4
5
6
7
8
9
10

因为每个 unique symbol 都有一个完全独立的身份,没有两个 unique symbol 类型是可以相互分配或比较的。

const sym2 = Symbol();
const sym3 = Symbol();
// 这个条件将总是返回 'false',因为 'typeof sym2' 和 'typeof sym3' 的类型没有重合。
if (sym2 === sym3) {
    // ...
}
1
2
3
4
5
6

# 知名的 Symbols

除了用户定义的 symbols 外,还有著名的内置 symbols。内置符号被用来表示内部语言行为。

下面是一个著名的 symbols 列表:

# Symbol.hasInstance

一个确定构造函数对象,是否识别一个对象为构造函数的实例之一的方法。由 instanceof 操作符的语义调用。

# Symbol.isConcatSpreadable

一个布尔值,表示一个对象应该被 Array.prototype.concat 平铺到其数组元素。

# Symbol.iterator

返回一个对象的默认迭代器的方法。被 for-of 语句的语义所调用。

# Symbol.match

一个正则表达式方法,与字符串的正则表达式相匹配。由 String.prototype.match 方法调用。

# Symbol.replace

一个正则表达式方法,用于替换一个字符串中匹配的子串。由 String.prototype.replace 方法调用。

# Symbol.search

一个正则表达式方法,返回字符串中符合正则表达式的索引。由 String.prototype.search 方法调用。

# Symbol.species

一个函数值的属性,是用于创建派生对象的构造函数。

# Symbol.split

一个正则表达式方法,在符合正则表达式的索引处分割一个字符串。由 String.prototype.split 方法调用。

# Symbol.toPrimitive

将一个对象转换为一个相应的基元值的方法。由 ToPrimitive 抽象操作调用。

# Symbol.toStringTag

一个字符串值,用于创建一个对象的默认字符串描述。由内置方法 Object.prototype.toString 调用。

# Symbol.unscopables

一个对象,其自身的属性名是被排除在相关对象的 'with' 环境绑定之外的属性名。

编辑此页 (opens new window)
#TypeScript
更新时间: 2023/09/18, 16:34:13
TypeScript Office - 公共类型
TypeScript Office - 类型兼容性

← TypeScript Office - 公共类型 TypeScript Office - 类型兼容性→

最近更新
01
技术随笔 - Element Plus 修改包名 原创
11-02
02
Reactor - 扩展性
11-02
03
Reactor - 最佳实践
11-02
更多文章>
Theme by Vdoing | Copyright © 2021-2024 Young Kbt | blog
桂ICP备2021009994号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式