es6 Symbol数据类型

ES6引入Symbol数据类型以避免属性名冲突,确保每个属性名的唯一性。Symbol值不可变,且不能与其他类型转换,常用于定义对象的唯一属性。Symbol函数可接受参数,若为对象则会调用其toString方法。Symbol.for方法能登记symbol值,便于之后查找。此外,Symbol.keyFor可获取已登记的symbol原始字符串。Symbol还可用于定义对象的不可枚举属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的原始字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值