标签:efi 没有 简单 name markdown ref key abc let
// 第一种
{
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];
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
。
标签:efi 没有 简单 name markdown ref key abc let
原文地址:http://www.cnblogs.com/liangcheng11/p/7412900.html