symbol到底是什么

let id = Symbol("id");


但是需要注意,与其他基本类型不同的是,它并不会默认的进行toString,如下所示:

console.log(id); //error
console.log(id.toString); // "Symbol(id)"
console.log(id.description);// "id"

并且,与Object相似的一点是,即便两个symbol有相同的值,也并不相等。

let id1 = Symbol("id");
let id2 = Symbol("id");
console.log(id1 == id2);   // false

所以每一个symbol都是独一无二的,那么再这种情况下,我们需要阻止创建重复的symbol,来避免空间的浪费。如下所示

/*在js中会有一个默认的全局的symbol注册表,symbol.for()
提供了注册和获取symbol的功能*/
let id = Symbol.for("id"); //获取description为id的symbol  无则创建
let id1 = Symbol.for("id"); //获取description为id的symbol	有则获取
console.log(id == id1); //true

Symbol可以用于充当对象里的key

const name = Symbol();
const age = Symbol();
let obj = { [name]: "一斤代码", [age]: "一斤烟" };

console.log(obj);

Symbol类型的key是不能通过Object.keys()或者for...in来枚举的,它未被包含在对象自身的属性名集合(property names)之中。所以,利用该特性,我们可以把一些不需要对外操作和访问的属性使用Symbol来定义。

也正因为这样一个特性,当使用JSON.stringify()将对象转换成JSON字符串的时候,Symbol属性也会被排除在输出内容之外
 

 参考文章:(7条消息) symbol的应用场景_celi_echo的博客-CSDN博客_symbol使用场景

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王源偷我华子抽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值