读书笔记(二十九):symbol

1.简单使用
Symbol函数接受一个可选参数,添加描述创建的symbol,不可用于访问,被存储在内部的description属性中,只有调用toString方法才可以读取。可以通过typeof判断类型。

let firstName = Symbol("first name");
let person = {};
person[firstName] = "Nicolas";
console.log("first name" in person); // false
console.log(person[firstName]); // "Nicolas"
console.log(firstName); // "Symbol(first name)"
console.log(typeof firstName); // "symbol"

2.共享体系
使用同一个symbol属性来表示一个独特的标识符,如:

let uid = Symbol.for("uid");
let obj = {
	[uid]: "12345"
}
console.log(obj[uid]); // "12345"

let uid2 = Symbol.for("uid");
console.log(uid === uid2); // true
console.log(obj[uid2]); // "12345"
console.log(uid2); // "Symbol(uid)"
console.log(Symbol.keyFor(uid2)); // "uid"

let uid3 = Symbol("uid");
console.log(Symbol.keyFor(uid3)); // undefined

Symbol.for()首先在全局Symbol注册表中搜索键为uid的Symbol是否存在,如果存在直接返回已有的Symbol;否则,创建一个新的Symbol并在全局中注册。Symbol.keFor()在全局注册表中检索与Symbol有关的键。

3.属性检索
Symbol不能强制转换为其他类型,因此不能与字符串拼接及数值运算。
要用Object.getOwnPropertySymbols()来检索对象中的Symbol属性,如:

let uid = Symbol.for("uid");
let obj = {
	[uid]: "12345"
}
let symbols = Object.getOwnPropertySymbols(obj);
console.log(symbols.length); // 1
console.log(symbols[0]); // "Symbol(uid)"
console.log(obj[symbols[0]]); // "12345"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值