第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Symbols in ES6

標(biāo)簽:
JavaScript

Symbol是ES6中(时隔多年)新增的一种primitive type,可以把它看做一种自动生成唯一字符串的机制,它的真实值被隐藏在代码后且永远无法直接获得

如何生成Symbol

// 最基础的方式const a = Symbol()// 可以传入一串描述该Symbol用途的字符串作为参数const b = Symbol('some description text')// 从全局的Symbol库中查询所需的Symbol// 如果未找到则新建一个并返回// 这种方式较以上直接构造Symbol的优点在于// 可以不必在外部作用域中专门维护一个变量用于存储生成的Symbolconst c = Symbol.for('my Symbol')// 由于不管如何Symbol都是全局存在的// 为了尽量避免可能发生的冲突 可以给Symbol添加相应的前缀const d = Symbol.for('prefix.Symbol')

如何判断一个值是否为Symbol

const a = Symbol()// 推荐方式typeof a === 'symbol'// true// 其余方式a instanceof Symbol // falseObject(a) instanceof Symbol // trueObject(a).valueOf() === a // true

如何获得Symbol的描述字符串

const a = Symbol('desc a')const b = Symbol.for('desc b')Symbol.keyFor(a) // undefinedSymbol.keyFor(b) // desc ba.toString() // Symbol(desc a)b.toString() // Symbol(desc b)

通过上述对比,个人感觉用Symbol.for()来生成Symbol好像更加合适

不仅可以避免使用不必要的变量污染作用域,并且能更方便的获得其描述

Symbol的用途

借助Symbol来实现单例模式

const Instance = Symbol.for('instance')function singleton() {    if (singleton[Instance]) {        return singleton[Instance]
    }    
    return singleton[Instance] = {}
}const a = singleton()const b = singleton()
a === b // true

如果将上例中的Symbol替换成任意一个不规则字符串(Magic String)对逻辑的实现并无影响

所以从这个角度看来,Symbol的出现更多的是对代码或者说程序层面上的提升,而不是函数性的提升

const o = {    foo: 1,
    [Symbol.for('bar')]: 2}Object.getOwnPropertyNames(o) // ['foo']Object.getOwnPropertySymbols(o) // [Symbol(for)]Object.keys(o) // ['foo']for (let key in o ){    console.log(key) // 'foo'}

可以看到,虽然Symbol作为Object的属性key不会被当作普通的键值被获取

但是还是有特殊途径来获得,所以并不能试图通过Symbol把Object的部分属性隐藏(作为外部不可访问的私有属性)

Built-in Symbols

个人感觉ES6自身提供的Built-in Symbols会是最常见的Symbol使用方式,例如Symbol.iterator:

const arr = [1, 2, 3]
arr[Symbol.iterator] // native functionconst it = arr[Symbol.iterator]() // 获得数组arr的Iterator

值得一提的是这些内部的Symbol并不是像我们自定义的那样注册到全局库中

而是作为Symbol构造函数的静态属性对外提供


(完)



作者:明月本無心
链接:https://www.jianshu.com/p/c7fb76a04596


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消