搜索
写经验 领红包

es6基础教程(es6常用方法)

导语:ES6 极简教程 Symbol

es6基础教程(es6常用方法)

概念

一句话:提供一个独一无二的值。

let a1 = Symbol();let b1 = Symbol();console.log(a1) // Symbol()console.log(a1 === b1); // false

Symbol()函数有一个可选参数,表示描述,主要是为了打印时区分。

let a1 = Symbol('a1');console.log(a1) // Symbol(a1)

作用

对象的属性都是字符串,很容易造成重复冲突,特别容易出现在继承和对象合并中。这时候引用Symbol可以避免此类问题。

let a1 = Symbol('abc');let obj = { [a1]: '123', abc: '456', def: '789'}console.log(obj[a1]) // 123console.log(obj); // {abc: "456", def: "789", Symbol(abc): "123"}

注意: Symbol出现在对象定义中&获取对象只过程中要用中括号扩起来(如果没扩就成字符串了)

遍历

for (let [key, value] of Object.entries(obj)) { console.log(key, value);}// abc 456// def 789

使用常规方法取obj值的时候没法取到Symbol为key的值。

这要时候使用 Object.getOwnPropertySymbols 它返回一个所有Symbol作为key值的数组。

或者使用Reflect , 它返回Symbol作为key值和非Symbol的所有key的数组。(后续文章细讲)

Object.getOwnPropertySymbols(obj) // [ Symbol(abc) ]Reflect.ownKeys(obj) // [ 'abc', 'def', Symbol(abc) ]

symbol.for Symbol.keyFor

此方法参数为一个key值。当调用这个的时候,它会先检查全局下是否用这个key值是否注册过Symbol值,如果注册过,他将返回这个Symbol 值。

let s1 = Symbol.for('cat');let s2 = Symbol.for('cat');s1 === s2 // true

Symbol.keyFor返回一个已登记的 Symbol 类型值的key

let s1 = Symbol.for("cat");Symbol.keyFor(s1) // "cat"let s2 = Symbol("cat");Symbol.keyFor(s2) // undefined

声明

转载请联系我本人并标明出处。

本文内容由快快网络小鸣创作整理编辑!