js-es6-Symbol新增的数据类型

1 什么是 Symbol ? Symbol,表示独一无二的值。它是 JS 中的第七种数据类型

let s1 = Symbol();
let s2 = Symbol();
console.log(s1===s2);//false

注意

Symbol 函数前不能使用 new 否则会报错,原因在于Symbol 是一个原始类型的值,不是对象。

Symbol 可以接收一个字符串作为参数,表示对Symbol的描述,主要是为了在控制台显示,或者转为字符串的时候,比较容易区分,不和任何数据相等

let s1 = Symbol('momo');
let s2 = Symbol('zhuanzhuan');
console.log(s1===s2);//false
console.log(Symbol('momo') === Symbol('momo'));//false

Symbol.for()首先在全局中搜索有没有以该参数作为名称的Symbol值,如果有,就返回这个Symbol值,否则就新建并返回一个以该字符串为名称的Symbol值。和直接的Symbol就点不同了。

let s3=Symbol.for('s3');
let s4=Symbol.for('s3');
console.log(s3===s4);//true

Symbol的作用可以解决冲突

let s1=Symbol.for('abc');
let obj={
	[s1]:'123',
	'abc':345,
	'c':456
}
console.log(obj);//{abc: 345, c: 456, Symbol(abc): "123"}

2 Symbol 数据类型的转换

可以转换成字符串,布尔值

console.log(String(Symbol('momo'))); // Symbol(momo)
console.log(Symbol('zhuanzhuan').toString()); // Symbol(zhuanzhuan)
console.log(!!Symbol()); // true
不能做任何运算

console.log(Number(Symbol()));//报错
console.log(Symbol('momo') + 'chuqiao');//报错
console.log(Symbol('momo') * 100);//不能做任何运算。

3 作为对象的属性名

let yy = Symbol('yy');
const obj = {};
obj[yy] = 'hello';
console.log(obj);//{Symbol(yy): "hello"}
console.log(obj[yy]);//hello

let ss = Symbol('ss');
const data = {
  [ss]: 'momo'
};
console.log(data);//{Symbol(ss): "momo"}
console.log(data[ss]);//momo

4.不能被for...in    for...of   values()   keys()   entries()循环遍历

虽然不能被遍历,但是也不是私有的属性,可以通过Object.getOwnPropertySymbols方法获得一个对象的所有的Symbol属性

通过Reflect.ownKeys()可以遍历对象所有的属性

const data = {
  [Symbol()]: 123,
  a: 1,
  b: 2
};
console.log(data);//{a: 1, b: 2, Symbol(): 123}
console.log(data['Symbol()']);//undefined
for(let i in data){
  console.log(i);//a b
}
console.log(Object.getOwnPropertySymbols(data)); // [Symbol()]
console.log(data[Object.getOwnPropertySymbols(data)[0]]);//123
console.log(Reflect.ownKeys(data));//["a", "b", Symbol()]



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值