【JS学习笔记 03】Symbol

Symbol

Symbol 用于防止属性名冲突而产生的 ,Symbol 的值是唯一的,不会重复的。可以理解为一个不会重复的随机生成字符串。
示例:循环生成10000组Symbol

for(let i = 0;i < 10000;i ++)
{
    let hd = Symbol();
    let edu = Symbol();
    console.log(hd == edu);
}

`symbol 唯一
输出10000个false ,Symbol 产生一个唯一的值

描述参数

可以传入字符串用于描述Symbol ,方便在控制台分辨Symbol

let symbol1 = Symbol("is name");
let symbol2 = Symbol("可以给Symbol 添加一个标签");

console.log(symbol1); 
console.log(symbol2.toString()); 

输出:
Symbol输出
注意: 传入相同的参数的两个Symbol 也是独立唯一的。因为参数只是描述而已,但使用 Symbol.for则不会
示例:

let symbol1 = Symbol("is name");
let symbol2 = Symbol("is name");
console.log(`symbol1 ==  symbol2?  ${symbol1 == symbol2}`);

输出:
symbol

Symbol.for()

根据描述获取Symbol,如果不存在则新建一个Symbol

  • 使用Symbol.for会在系统中将Symbol登记
  • 使用Symbol则不会登记
    示例:
let symbol1 = Symbol.for("is name");
let symbol2 = Symbol.for("is name");
console.log(`symbol1 ==  symbol2?  ${symbol1 == symbol2}`);

输出:
symbol

Symbol.keyFor()

Symbol.keyFor 根据使用Symbol.for登记的Symbol返回描述,如果找不到返回undefined 。只能找到Symbol.for定义的标签,否则返回undefined
示例:

let symbol = Symbol("this is a label");
console.log(Symbol.keyFor(symbol));

let symbol1 = Symbol.for("this is a label");
console.log(Symbol.keyFor(symbol1));

输出:
symbol

Symbol 对象属性

Symbol 是独一无二的所以可以保证对象属性的唯一。

  • Symbol 声明和访问使用 [](变量)形式操作
  • 也不能使用 . 语法因为 .语法是操作字符串属性的。
    示例:
let symbol = Symbol("is name");
let obj = 
{
    [symbol] : "this is a label of symbol"
}
console.log(`symbol's label is : ${obj[symbol]}`);

示例:
symbol

  • Symbol 值作为对象属性名时,不能用点运算符来调用,否则会把symbol作为了一个字符串类型的属性名,丧失了独一性:
    示例:
var mySymbol = Symbol();
var a = {};
a.mySymbol = 'Hello!';//导致mysymbol转变成了字符串属性名
console.log(a[mySymbol]);
console.log(a['mySymbol']);

输出:
symbol

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

流水线程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值