ES6入门之Symbol

ES5对象属性名都是字符串容易造成属性名的冲突。这样就会覆盖掉原有属性。
var user={name:'abc'};
  user.name='Hello';

JavaScript基本数据类型有6种:Undefined、Null、Boolean、String、Number、Object。

ES6新增了一种数据类型:Symbol,表示独一无二的值,Symbol最大的用途是用来定义对象的私有属性名。

let getName = Symbol('name');
	let obj = {
		[getName](){
			return 'liqing';
		}
	};
	console.log(obj[getName]());

Symbol属性不能通过Object.keys()和for in 得到:

let name = Symbol('name');
	let obj2 = {
		age:22,
		[name]:'leo'
	};
	console.log(Object.keys(obj2));  //只有["age"]对象
	for(let key in obj2){
		console.log(key);   //age 
	}

但是可以通过Object.getOwnPropertySymbols得到:

console.log(Object.getOwnPropertySymbols(obj2));   //[Symbol(name)]
let key = Object.getOwnPropertySymbols(obj2)[0];
	console.log(obj2[key]);

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

Symbol.keyFor方法返回一个已登记的Symbol类型值的key。实质就是检测该Symbol是否已创建。

let user = Symbol.for('name');
let user3 = Symbol.for('name');
console.log(user === user3);  //true
console.log(Symbol.keyFor(user3));  //name
console.log(Symbol.keyFor(user));  //name




猜你喜欢

转载自blog.csdn.net/weixin_42595418/article/details/80903165