Symbol类型及基础用法

前言

大多数时候,我们都使用的字符串作为对象属性,即使是使用数字,也会被自动转化为字符串类型。

let obj = {
   
   
	0: "我是数字",  // 0 等同于 "0"
	true: true,    // true 等同于 "true"
}
console.log(obj[0] === obj["0"]) // true
console.log(obj[true] === obj["true"]) // true

字符串类型的对象属性名很容易造成属性名冲突的问题。

比如在使用项目组其他成员封装的模块/对象,又想添加新的属性或者新的方法,这就容易使得新属性名与原有属性名冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是ES6引入的Symbol的原因。

Symbol” 值表示唯一的标识符。

在对象中,Symbol 可以作为属性名。由于每个 Symbol 都是唯一的,因此可以确保属性名的唯一性,避免属性名冲突的问题。

Symbol

Symbol 是 JavaScript 中的一种新的基本数据类型,引入自 ECMAScript 6(ES6)标准。它是一种不可变且唯一的数据类型,可以用来创建独一无二的键(key)。

Symbol 的创建方式是通过调用全局的 Symbol() 函数来生成。每个通过 Symbol() 创建的 Symbol 值都是独一无二的,即使它们的描述符相同也不相等。

创建Symbol

let id = Symbol();

Symbol的描述

// 添加symbol描述
let id1 = Symbol("id")
let id2 = Symbol("id")
console.log(id1 == id2)  // false

// 获取Symbol描述
let des = id1.description

id1id2是两个描述相同的Symbol,但是它们不相等。
Symbol保证是唯一的。即使创建了n个描述相同的Symbol,它们的值也是不同的。描述只是一个标签,不影响Symbol的值。

Symbol不会自动转化为字符串

let id = Symbol("id");
alert(id); // 类型错误:无法将 symbol 值转换为字符串。
// Uncaught TypeError: Cannot convert a Symbol value to a string
alert(id.toString()); // Symbol(id)

console.log(id); // Symbol(id)

使用Symbol作为对象属性名

const obj = {
   
   };
const mySymbol = Symbol();
obj[mySymbol] = 'Symbol属性';
console.log(obj)
console.log(obj[mySymbol]); // 输出:Symbol属性

在这里插入图片描述
在对象中使用Symbol,需要使用方括号[]括起来。例如obj[mySymbol]

Symbolfor...in中会被跳过

let id = Symbol("id");
let user = {
   
   
  name: "John",
  age: 30,
  [id]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值