ES6学习笔记(3)- Symbol

Symbol语法

Symbol([description]); // description描述信息可以有,也可以没有,可以是字符串也可以是数字

注意点

  • Symbol不是构造函数,不能使用new关键字
  • Symbol()括号中的内容代表Symbol的描述,只是为了方便开发中辨识,并不是Symbol的值
  • 每一个Symbol类型数据都独一无二,不能划等号
  • Symbol值不能与其他数据进行运算
  • Symbol可以显示的转为字符串,布尔值,但不能转为数字。

Symbol类型转换

let s = Symbol('test');
console.log(String(s)); // 转为字符串
console.log(s.toString()); // 转为字符串
console.log(Boolean(s)); // 转为布尔值

Symbol共享体系

有时我们可能希望在不同的代码中共享一个Symbol,此时可用Symbol.for()

let uid = Symbol.for('uid');
let object = {};
object[uid] = '12345';
console.log(obejct[uid]); // '12345'
console.log(uid); // 'Symbol(uid)'

Symbol.for()方法首先在全局Symbol注册表中搜索键为‘uid’的Symbol是否存在,如果存在,直接返回已有的Symbol,否则创建一个新的Symbol,并使用这个键在Symbol全局注册表中注册,随即返回新创建的Symbol
后续如果再传入同样的键调用Symbol.for()会返回相同的Symbol

let uid = Symbol.for('uid');
let object = {};
object[uid] = '12345';

let uid1 = Symbol.for('uid');
console.log(object[uid1]); // 使用.for()共享uid,输出 '12345'

let uid2 = Symbol('uid'); 
console.log(object[uid2]); // 未用.for()不共享,创建一个新的Symbol,输出 undefined
object[uid] = '测试';
console.log(object[uid2]); // '测试'

object[uid] = 'abc'; // 修改uid内容,uid和uid1共享,都变为'abc' ,  uid2不共享,还是'测试'
console.log(object[uid]); // 'abc'
console.log(object[uid1]); // 'abc'
console.log(object[uid2]); // '测试'

Symbol属性检索

  • 语法
Object.getOwnPropertySymbols
let uid = Symbol.for('uid');
let object = {
	[uid]: '12345'
};
let symbols = Object.getOwnPropertySymbols(object);
console.log(symbols.length); // 1
console.log(symbols[0]);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值