ES6 Symbol的应用场景
一、簡(jiǎn)介
具體使用請(qǐng)參考:API
ES6 引入了一種新的原始數(shù)據(jù)類(lèi)型Symbol,表示獨(dú)一無(wú)二的值。它是 JavaScript 語(yǔ)言的第七種數(shù)據(jù)類(lèi)型,前六種是:undefined、null、布爾值(Boolean)、字符串(String)、數(shù)值(Number)、對(duì)象(Object)。
Symbol 值通過(guò)Symbol函數(shù)生成。這就是說(shuō),對(duì)象的屬性名現(xiàn)在可以有兩種類(lèi)型,一種是原來(lái)就有的字符串,另一種就是新增的 Symbol 類(lèi)型。凡是屬性名屬于 Symbol 類(lèi)型,就都是獨(dú)一無(wú)二的,可以保證不會(huì)與其他屬性名產(chǎn)生沖突。
注意,Symbol函數(shù)前不能使用new命令,否則會(huì)報(bào)錯(cuò)。這是因?yàn)樯傻?Symbol 是一個(gè)原始類(lèi)型的值,不是對(duì)象。也就是說(shuō),由于 Symbol 值不是對(duì)象,所以不能添加屬性。基本上,它是一種類(lèi)似于字符串的數(shù)據(jù)類(lèi)型。
二、應(yīng)用場(chǎng)景
1.
{let a1=Symbol.for('abc')let obj={[a1]:'123',//參考api中對(duì)象的擴(kuò)展部分中屬性名表達(dá)式,這里[a1]代表變量a1的key'abc':'123','c':456}console.log('obj',obj) }打印結(jié)果為
{abc: "123", c: 456, Symbol(abc): "123"}可以看到兩個(gè)abc是不沖突的
注意
常規(guī)的for in,let of的方式去取 ,比如Object.entries,Object.keys,是拿不到symbol的值
for(let [key,value] of Object.entries(obj)){console.log('let of',key,value)}結(jié)果為
let of abc 123let of c 456解決方案是
1)使用Object.getOwnPropertySymbols(obj) 。這種方式只拿到了symbol的變量的值
Object.getOwnPropertySymbols(obj).forEach(function(item){console.log(obj[item])})結(jié)果為
1232)使用Reflect.ownKeys(obj)
Reflect.ownKeys(obj).forEach(function(item){console.log(obj[item])})結(jié)果為
123 456 123?
轉(zhuǎn)載于:https://www.cnblogs.com/knyel/p/7844178.html
總結(jié)
以上是生活随笔為你收集整理的ES6 Symbol的应用场景的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《OKR源于英特尔和谷歌的目标管理利器》
- 下一篇: Apex 的异常处理