es6-Symbol
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了es6-Symbol相关的知识,希望对你有一定的参考价值。
- Symbol 表示独一无二的值。
- Symbol 值通过Symbol函数生成。也就是说,对象的现在可以有两种类型:
- 原来就有字符串的类型
- 新增的Symbol类型
一、Symbol 创建方式
// 第一种
{
var a = Symbol(‘132‘);
console.log(‘Symbol‘, a);
}
{
let a = Symbol(‘132‘);
let b = Symbol(‘132‘);
console.log(‘unequi‘, a === b); // false
}
{
let a = Symbol(‘132‘);
let b = a;
console.log(‘equi‘, a === b); //true
}
// 第二种
{
let a3 = Symbol.for(‘a3‘);
let a4 = Symbol.for(‘a3‘);
console.log(‘for‘,a3 === a4); //true
}
二、对象的属性
var sbl = Symbol();
// 第一种
{
const a = {};
a[sbl] = ‘123‘;
}
// 第二种
{
const a = {
[sbl]: ‘123‘
};
}
// 第三种
{
Object.defineProperty(a, sbl, { value: ‘Hello!‘ });
}
在对象在字变量方式创建对象,用Symbol类型来创建对象属性必须有[]
;
三、属性名的遍历
由于Symbol特殊性,并不能用for in
、getOwnPropertyNames
和keys
将对象属性遍历出来,如下:
var sbl = Symbol();
let obj = {
[sbl]: ‘123‘,
‘abc‘: 345,
‘c‘: 456
}
for (var o in obj) {
console.log(‘obj‘, o); // 并没有输出obj[sbl];
}
或
var sbl = Symbol();
let obj = {
[sbl]: ‘123‘,
‘abc‘: 345,
‘c‘: 456
}
console.log(‘obj‘, Object.getOwnPropertyNames(obj)); // 返回数组并没有[sbl];
console.log(‘keys‘, Object.keys(obj)); // 返回数组并没有[sbl];
es6 添加遍历的api
getOwnPropertySymbols
只能遍历Symbol的属性
Object.getOwnPropertySymbols(obj).forEach(item => {
console.log(‘Symbol‘, item, obj[item]);
});
Reflect.ownKeys()
这是Reflect的一个方法
Reflect.ownKeys(obj).forEach(item => {
console.log(‘ownKeys‘, item, obj[item]);
});
四、Symbol.for()
在前面创建方式中提到过,简单来说,就是可以创建相同的Symbol
。
五、其他的api,基本按照这个线来的,其他勤加练习。
以上是关于es6-Symbol的主要内容,如果未能解决你的问题,请参考以下文章
ES6-Symbol的用法 ,symbol在对象中的应用,改变值