JS中的Symbol

news/2024/7/11 1:21:28 标签: javascript, 前端, 开发语言, es6

Symbol 是 ES6 中新增的一种基本数据类型,它表示独一无二的值。它的主要作用在于解决ES5中对象属性名容易被覆盖的问题,因为Symbol值是唯一的,所以它可以作为对象属性名,保证对象的属性不会被其他属性覆盖。

Symbol的用途:

  1. 定义对象的唯一属性名,避免属性名冲突。它可以用来命名对象的私有属性,可以防止属性被外部代码访问或覆盖。

  2. 使用Symbol作为key值来定义常量,比如定义系统级别的事件名称,可以保证名称唯一。

  3. 可以用来定义类的私有方法和属性,因为它们在类外部无法访问。

  4. 作为 Iterator 接口的方法名(Symbol.iterator)。

  5. 作为类的默认值,可以使用Symbol来定义类的默认行为。

总之,Symbol可以用来解决对象属性命名冲突问题,保证属性的唯一性,同时还可以用来定义私有属性和方法或常量等。

Symbol是ES6中新增的一种数据类型,用于定义一个独一无二的标识符。Symbol的基本用法如下:

  1. 创建一个Symbol

可以使用Symbol()函数创建一个Symbol,每个Symbol都是独一无二的,即使使用相同参数创建的Symbol也是不同的。

javascript">const mySymbol = Symbol();

  1. 给Symbol一个描述符

Symbol也可以接受一个字符串参数,用于描述Symbol的用途。

javascript">const mySymbol = Symbol('my description');

  1. 在对象中使用Symbol

Symbol可以用作对象的属性名,通过这种方式可以创建私有属性,避免属性名冲突。

javascript">const mySymbol = Symbol('my description');
const myObject = {
    [mySymbol]: 'value'
};

  1. 使用内置的Symbol

ES6提供了许多内置的Symbol,可以用于改变对象的默认行为。例如,使用Symbol.iterator可以让对象成为可迭代对象,使用Symbol.toPrimitive可以改变对象默认的类型转换行为。

javascript">const myObject = {
    [Symbol.toPrimitive]: function(hint) {
        if (hint === 'number') {
            return 123;
        } else if (hint === 'string') {
            return 'myObject';
        } else {
            return true;
        }
    }
};

console.log(2 * myObject); // 246
console.log(String(myObject)); // 'myObject'
console.log(Boolean(myObject)); // true

总之,Symbol是一种非常有用的数据类型,可以用于创建独一无二的标识符,避免属性名冲突,改变对象的默认行为等。


http://www.niftyadmin.cn/n/5132652.html

相关文章

Unity 动态切换图片

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;/// <summary>切换对象显示</summary> public class SwitchObject : MonoBehaviour {public GameObject[] goList;public Button nextButton;public Button…

Word批量删除文档属性和个人信息方法图解

投标文件中设计敏感信息&#xff0c;在投标前必须删除&#xff0c;Word批量删除文档属性和个人信息方法图解&#xff1a; 右键word文件属性--详细信息&#xff0c;可以查看如下信息&#xff1b; 删除上述信息的办法&#xff1a; 1.打开word文件---文件 2.检查文档、检查文档 检…

san.js源码解读之模版解析(parseTemplate)篇——readCall函数

相关文章 san.js源码解读之模版解析(parseTemplate)篇——readAccessor函数 一、源码分析 /*** 读取调用** param {Walker} walker 源码读取对象* param {Array} defaultArgs 默认参数* return {Object}*/ function readCall(walker, defaultArgs) {walker.goUntil(); // 向前…

搭建gnn环境

1.无法激活 激活pytorch遇到报错usage: conda-script.py [-h] [--no-plugins] [-V] COMMAND ... conda-script.py: error: arg-CSDN博客 参考教程 【精选】手把手教你在windows10安装GNN相关环境&#xff08;torchtorch_geometricrdkitdeepchem&#xff09;_gnn环境相关的包-…

2023辽宁省赛E

Solution 题目大致分为三个步骤 计算 P ( S ) P(S) P(S)证明删除区间连续且找到最值位置根据最值位置求出答案 接下来过程中不合法的组合数都默认为 0 0 0 第 1 步 - 求出总值 考虑 S m { 1 , 2 , ⋯ , m } S_m \{1, 2, \cdots, m\} Sm​{1,2,⋯,m} , 则有 $P(S_{n2}…

MySQL篇---第六篇

系列文章目录 文章目录 系列文章目录一、 MySQL 中 varchar 与 char 的区别?varchar(30) 中的 30代表的涵义?二、 int(11) 中的 11 代表什么涵义?三、为什么 SELECT COUNT(*) FROM table 在 InnoDB 比MyISAM 慢?一、 MySQL 中 varchar 与 char 的区别?varchar(30) 中的 30…

win10虚拟机安装教程

目录 1、安装VMware 10、12、16都可以&#xff0c;看个人选择 2、开始安装系统&#xff08;以vm16为例&#xff09; 3、在虚拟机中安装win10 完成 1、安装VMware 10、12、16都可以&#xff0c;看个人选择 下面链是我虚拟机安装包&#xff0c;需要可以下载。 YR云盘 软件安…

ChatGPT 介绍

目录 什么是 AIGC&#xff1f; 图灵测试 chatgpt的发展历史 聊天机器人 Eliza Eliza 后辈 Alice 机器学习 smaterChild 人工神经网络 Transformer OpenAI (Generative Pre-trained Transformer&#xff09; AI会导致我们失业吗 什么是 AIGC&#xff1f; AIGC&#x…