js学习笔记(symbol)

symbol

声名定义symbol

let smb = Symbol( );
let smb2 = Symbol( );
console.log( smb == smb2 ); => false
//symbol数据类型是不重复的,也不相等(类似于唯一的字符串)

let smb = Symbol('symbol数据的描述');
console.log(smb.description); => symbol数据的描述
//可以在Symbol的()内添加对数据的描述,并使用symbol.description来读取描述

smb1 = Symbol.for('csdn');
smb2 = Symbol.for('csdn');
console.log('smb1 == smb2'); => true
//也可以使用Symbol.for定义symbol数据,并且该方法会于内存中存储其symbol值
//当再次使用该symbol值时(同一描述),系统会自动调用存储的symbol


symbol.keyfor()

let csdn = Symbol.for('csdn');
console.log(csdn); => csdn

let smb = Symbol('github');
console.log(smb) => undefined
//只有使用Symbol.for()定义的symbol可以使用Symbol.keyfor( )方法取得它的描述

symbol的使用

let grade = {
	'张三' : { js:80, css: 90 },
	'张三' : { js:90, css: 70 }
}
console.log(grade); => { '张三' : { js:90, css: 70 } }
//因为对象中的key有重复,故在读取时会覆盖前面的属性

let user1 = { name:'张三',  key: Symbol() };
let user2 = { name:'李四',  key:Symbol() };
let grade = { 
	[user1.key]: { js:90, css:70 },
	[user2.key]: { js:80, css:80 },
 };
 console.log([ user2.key ]); => { js:80, css:80 }
 //为了避免对象中键名的重复,可以使用Symbol作为键名

symbol的遍历

let symbol = Symbol("这是一个Symbol属性");
let csdn = { 
	name:'csdn',
	[ symbol ]; 'csdn.com'
 }

for ( const key in csdn ) {
	console.log(key);
}
for ( const key of Object.keys(csdn) ) {
	console.log(key);
}
=> name
//for in和for of都无法遍历以symbol作为键名的属性

for( const key of Object.getOwnPropertySymbol(csdn) ) {
	console.log(key);
}
=> Symbol("这是一个Symbol属性")
//该方法只能遍历对象的symbol属性,但是普通属性是无法遍历的

for( const key of Reflect.ownKeys(csdn) ) {
	console.log(key);
}
=> name  
   Symbol("这是一个Symbol属性")
//该方法则可以遍历对象的所有属性,包含symbol及普通属性

故可以使用symbol对对象的属性进行保护

let site = Symbol("这是一个Symbol");
class User {
	consrtuctor(name) {
		this.name = name;
		this[site] = 'csdn';	
	}
}
let lisi = new User('李四');
for( const key in lisi ) {
	console.log(key);
}
=> name
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值