ES6学习之Symbol

本文详细介绍了JavaScript中的Symbol数据类型,包括其定义、唯一性特点、作为属性名的应用、与字符串和布尔值的转换规则,以及如何通过Symbol.for()和Symbol.keyFor()进行注册和查找。

定义:一种新的原始数据类型,表示独一无二的值

const a = Symbol();
const b = Symbol("foo") //接收参数的Symbol,参数表示对Symbol的描述

相同参数的Symbol不相等

const a = Symbol();
const b = Symbol();
a === b //false
const c = Symbol("foo");
const d = Symbol("foo");
c === d //false

symbol值不能与其他类型做运算,但能显示的转化为字符串和布尔值

const c = Symbol("foo");
let d = "hello" + c;    //TypeError: Cannot convert a Symbol value to a string
String(c); //Symbol(foo)
c.toString(); //Symbol(foo)
Boolean(c) //true

Symbol作为属性名,不能使用点符号,只能使用括号括起来

const a = Symbol("foo");
let b = {};
b.a = "Hello";
b[a] = "Hi";
console.log(b[a]) //Hi

Symbol作为属性名,遍历时:该属性不会出现在for...infor...of循环中,也不会被Object.keys()Object.getOwnPropertyNames()JSON.stringify()返回。但是可以通过Object.getOwnPropertySymbols获取Symbol的属性名

const obj = {};
let a = Symbol('a');
let b = Symbol('b');

obj[a] = 'Hello';
obj[b] = 'World';

const objectSymbols = Object.getOwnPropertySymbols(obj);

objectSymbols
// [Symbol(a), Symbol(b)]

Symbol.for(),Symbol.keyFor()

  • Symbol.for():接受一个字符串作为参数,然后搜索有没有以该参数作为名称的Symbol值。如果有,就返回这个 Symbol 值,否则就新建并返回一个以该字符串为名称的 Symbol 值
const a = Symbol.for("foo");
const b = Symbol.for("foo");
a ===b //true
  • Symbol.keyFor():返回一个已登记的 Symbol 类型值的key
let s1 = Symbol.for("foo");
Symbol.keyFor(s1) // "foo"

let s2 = Symbol("foo");
Symbol.keyFor(s2) // undefined

 

转载于:https://www.cnblogs.com/sghy/p/7793193.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值