复习:JavaScript 中的symbol

server/2024/10/19 21:38:08/

在 JavaScript 中,Symbol 是一种新的原始数据类型,它表示唯一的、不可变的值。Symbol 类型的值可以作为对象的唯一属性键,这是它与其他数据类型(如字符串和数字)相比的独特之处。使用 Symbol 可以避免属性名的冲突,因为每个 Symbol 值都是唯一的。

创建 Symbol

要使用 Symbol,你需要调用 Symbol() 函数,并传递一个描述性的字符串作为参数。这个字符串主要用于调试目的,并不会对 Symbol 的唯一性产生影响。

javascript">let sym1 = Symbol('description1');
let sym2 = Symbol('description1');console.log(sym1 === sym2); // 输出 false,因为每次调用 Symbol() 都会返回一个新的、唯一的 Symbol 值

作为属性键

由于 Symbol 值的唯一性,它们可以用作对象的属性键,从而避免属性名的冲突。

javascript">let obj = {};
let sym = Symbol('mySymbol');obj[sym] = 'Hello, world!';console.log(obj[sym]); // 输出 'Hello, world!'
console.log(obj['mySymbol']); // 输出 undefined,因为 'mySymbol' 是一个字符串,而不是之前创建的 Symbol 值

内置 Symbol

JavaScript 还定义了一些内置的 Symbol 值,用于表示一些特殊的行为或属性。这些内置的 Symbol 值可以通过 Symbol 对象上的属性来访问,例如 Symbol.iteratorSymbol.toPrimitiveSymbol.toStringTag 等。

例如,Symbol.iterator 用于定义一个对象的默认迭代方法,该方法会被 for...of 循环和扩展运算符(...)等使用。

javascript">let iterable = {[Symbol.iterator]: function() {let index = 0;let values = [1, 2, 3];return {next: function() {if (index < values.length) {return { value: values[index++], done: false };} else {return { done: true };}}};}
};for (let value of iterable) {console.log(value); // 输出 1, 2, 3
}

注意事项

  • Symbol 值不能与其他类型的值进行运算(如加法)。尝试这样做会导致类型错误。
  • Symbol 值可以作为对象的属性键,但不能作为字符串字面量属性键(即你不能直接在对象字面量中使用 Symbol 作为键名)。
  • 尽管 Symbol 值是唯一的,但它们的描述性字符串不必唯一。两个具有相同描述性字符串的 Symbol 值仍然是不相等的。

总的来说,Symbol 提供了一种在 JavaScript 中创建唯一标识符的方法,这有助于避免属性名的冲突,并使得代码更加健壮和可维护。


http://www.ppmy.cn/server/133153.html

相关文章

linux通过configfs方式开启uvc、uac、adb等功能

linux通过configfs方式开启uvc、uac、adb等功能 IamGroot2023 已于 2023-03-22 13:02:02 修改 阅读量3.1k 收藏 20 点赞数 3 文章标签&#xff1a; adb linux android Powered by 金山文档 版权 setusbconfig uvc&#xff1a;开启uvc功能。 切换到usb device模式&#xff1a; …

架构师知识梳理(十):系统架构设计与评估

架构基本概念 软件架构&#xff1a;从需求分析到软件设计之间的过渡过程称为软件架构&#xff0c;软件架构为软件系统提供了一个结构、行为和属性的高级抽象&#xff0c;由构件的描述、构件的相互作用&#xff08;连接件&#xff09;、指导构件集成的模式以及这些模式的约束组成…

Uncaught (in promise) TypeError: Cannot convert object to primitive value

使用vue3的时候报了这个错误&#xff0c;而且还同时报了一个警告 说一下我这里这个错误和警告的原因&#xff0c;是因为我把传给 第三方组件的值 也当做了 第三方组件的 ref&#xff0c;可能没太说清楚&#xff0c;所以接下来看代码&#xff0c;我这里使用的第三方组件是 vxe-t…

K8s简介和安装部署

一、 Kubernetes 简介及部署方法 1、应用部署方式演变 Kubernetes简称为K8s&#xff0c;是用于自动部署、扩缩和管理容器化应用程序的开源系统&#xff0c;起源于Google 集群管理工具Borg。 传统部署 &#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优…

C++初阶——入门

目录 1、C发展历史 2、C版本更新 3、C参考文档 4、C书籍推荐 5、C的程序 6、命名空间 6.1 namespace的作用 6.2 namespace的定义 6.3 namespace的使用 7、C输入&输出 8、缺省参数 9、函数重载 10、引用 10.1 引用的概念和定义 10.2 引用的特性 10.3 引用的使…

测试自动化成功关键因素!

在软件测试领域&#xff0c;自动化测试被广泛认为是提高效率和准确性的关键工具。然而&#xff0c;尽管自动化测试具有巨大潜力&#xff0c;但实现其最大效益并非易事。本文将探讨测试自动化中的一些常见挑战&#xff0c;并提供策略以确保项目的成功。 自动化测试的局限性 尽管…

港大和字节提出长视频生成模型Loong,可生成具有一致外观、大运动动态和自然场景过渡的分钟级长视频。

HKU, ByteDance&#xff5c;⭐️ 港大和字节联合提出长视频生成模型Loong&#xff0c;该模型可以生成外观一致、运动动态大、场景过渡自然的分钟级长视频。选择以统一的顺序对文本标记和视频标记进行建模&#xff0c;并使用渐进式短到长训练方案和损失重新加权来克服长视频训练…

Mysql数据库 | 第一章 | 基本介绍 | 数据库的安装 | 工具下载 | 创建 | 查询 | 备份 | 三层结构

MySQL数据库 P1 数据库的作用 2022/6/19 1.简介 MySQL是一个[关系型数据库管理系统]&#xff0c;由瑞典[MySQL AB](https://baike.baidu.com/item/MySQL AB/2620844) 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一&#xff0c;在 WE…