es6 Symbol数据类型

1.es6引入Symbol数据类型的原因

ES5 的对象属性名都是字符串,容易造成属性名的冲突。而es6引入的Symbol数据类型可以保证每个属性的名字都是独一无二的,这样就从根本上防止属性名的冲突。

	let s5 = Symbol('abc');
    let s6 = Symbol('abc');
    console.log(s5 === s6);//输出:false,即独一无二
	//创建两个空的symbol变量也不恒等
	let k1=Symbol();
    let k2=Symbol();
    console.log(k1===k2);//输出:false

2.对象的属性名可能存在两种类型

(1)直接是字符串
(2)symbol类型的名称

3.通过symbol函数产生变量

	let s1 = Symbol();
    let s2 = Symbol();
	console.log(typeof s1);//输出:symbol

4.将string类型转化为symbol类型

	let s3 = Symbol(str);
    console.log(s3);//Symbol(abc)

如果symbol函数的参数不是字符串,会默认执行toString()方法来获取字符串

	let obj = {
    	name: '男男女女',
        toString() {
        	return this.name;
        }
    }
    console.log(obj.toString());//obj直接转字符串
    let s4 = Symbol(obj);//使用symbol
    console.log(s4);//输出:Symbol(男男女女)

5.symbol变量直接转化字符串

	let s7 = Symbol('abc');
    console.log(s7.toString());
    console.log(String(s7));
    console.log(s7.description); //使用description直接获取字符串值

6.symbol变量作为对象的属性

	let aa=Symbol();
    let objstu={
    	[aa]:'aaa'
    }
    console.log(objstu);
    console.log(objstu[aa]);//输出:undefined

7.使用同一个symbol值

	let k2=Symbol.for('abc');
    let k3=Symbol.for('abc');
    console.log(k2===k3);//输出:true

	let k6=Symbol.for('kkkk');
    let k8=Symbol.for('mmmm');
    console.log(k6===k8);//输出:false

8.获取登记过的symbol变量值

	let k4=Symbol('abc');
	let k5=Symbol.for('abc');
	console.log(Symbol.keyFor(k4));//输出:undefined,直接生成一个对应的symbol变量
    console.log(Symbol.keyFor(k5));//输出:abc,返回key的原始字符串
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值