es6 Symbol
1.Symbol 值通过Symbol 函数生成,凡是属性名属于Symbol 类型,就是
独一无二的,可以保证不会与其他属性名冲突。
// 没有参数的时候
let s1 = Symbol(); let s2 = Symbol(); s1 === s2; // false // 有参数的情况 let s1 = Symbol('foo'); let s2 = Symbol('foo'); s1 === s2 // false
2.作为属性名的 Symbol
由于每个Symbol 值都是不相等的,用于对象的属性名,就能保证不会重复出现。
let mySymbol = Symbol(); // 第一种写法 let a = {}; a[mySymbol] = 'Hello'; // 第二种写法 let a = { [mySymbol]: 'Hello' } // 第三种写法、 let a = {}; Object.definePropert(a,mySymbol,{value: 'Hello!'}) a[mySymbol] // "Hello!"
3.属性名的遍历
Symbol 作为属性名,该属性不会出现在for...in,for...of 循环中,也不会出现在Object.keys(),
Object.getOwnPropertyNames(),JSON.stringify() 返回。
只有Object.getOwnPropertySymbols 方法可以获取指定对象的所有Symbol 属性名。
const obj = {}; let a = Symbol('a'); let b = Symbol('b'); obj[a] = 'Hello'; obj[b] = 'World'; const objectSymbols = Object.getOwnPropertySymbols(obj) console.log(objectSymbols) // [Symbol(a),Symbol(b)]
4.Es6 提供内置 Symbol.
Symbol.hasInstance Symbol.isConcatSpreadable Symbol.species
Symbol.match Symbol.replace Symbol..split Symbol..iterator
Symbol.toPrimitive Symbol.toStringTag
我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan