精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

ES6 中的 Symbol 類型在實際開發中用得多嗎?

開發 前端
JavaScript 中的 Array、Set、Map 數據類型都可被 for...of 所遍歷。如果面試官說:“實現一個可以被 for...of 所遍歷的對象” 這個該怎么實現呢?

知乎上看到的一個問題:“ES6 中的 symbol 類型在實際開發中用得多嗎?”,以前在學習 ES6 時也有此疑問,這個 Symbol 是干嘛的?有什么應用場景?

Symbol 在實際開發中用的不多,在看一些類庫的實現時有看到相關使用,下面分享下關于 Symbol 的幾個使用場景。

做為私有屬性

使用 Symbol 做為私有屬性,最早知道這個是在 Egg 源碼中學習到的,看一段相關的代碼片段:

// https://github.com/eggjs/egg/blob/3.0.0/lib/core/base_context_logger.js#L22
const CALL = Symbol('BaseContextLogger#call');
class BaseContextLogger {
[CALL](method, args) {
// ...
this.ctx.logger[method](...args);
}
}

在 JavaScript 中為了實現私有屬性,之前常用的一種方式是命名規范約定,方法名以 _ 開始。

Symbol 出現之后看到的一個相對較多的場景是用它來模式私有屬性、方法。這對一些 for...in、Object.getOwnPropertyNames() 操作是可以隱藏掉這些屬性,但是 ES6 中的 Symbol 和強類型語言中的 private 相比并不完全是私有的,仍然能通過 Object.getOwnPropertySymbols()、Reflect.ownKeys() 操作枚舉到這些屬性進行訪問。

鉤子函數 - 自定義格式輸出

使用 MongoDB Node.js 驅動程序生成一個 id,當執行 ObjectId()或 new ObjectId() 時總會按照固定格式輸出,如下所示:

new ObjectId("632c6d93d65f74baeb22a2c9")

沒了解實現之前,看起來總歸是有些神秘的,如果自己寫一個類并實現自定義輸出信息該怎么做呢?帶著好奇之心看了下源碼實現:

// https://github.com/mongodb/js-bson/blob/v4.4.0/src/objectid.ts#L343
class ObjectId {
toHexString(): string {
const hexString = this.id.toString('hex');
return hexString;
}

[Symbol.for('nodejs.util.inspect.custom')](): string {
return this.inspect();
}

inspect(): string {
return `new ObjectId("${this.toHexString()}")`;
}
}

Symbol.for(str) 是新建一個以該字符串為名稱的值,并注冊到全局,如果已注冊過,就直接返回。與 Symbol() 區別簡單理解是,Symbol() 調用 100 次會返回 100 個不同 Symbol 值,Symbol.for(str) 調用 100 次返回的 Symbol 值都是相同的。

Node.js util 模塊實現了 util.inspect.custom 方法用于聲明自定義檢查函數,這里個人理解更像一個鉤子函數,在 https://github.com/nodejs/node/issues/20821 PR 中已支持將 util.inspect.custom 做為公共符號,實現了不用加載 util 模塊就可在任何地方使用它,這里用的就是 Symbol.for()。

面試官:實現一個可遍歷對象

JavaScript 中的 Array、Set、Map 數據類型都可被 for...of 所遍歷。如果面試官說:“實現一個可以被 for...of 所遍歷的對象” 這個該怎么實現呢?

Symbol 提供了 Symbol.iterator 方法,該方法返回一個迭代器對象,目前 Array、Set、Map 這些數據結構默認具有 Symbol.iterator 屬性,而對象 Object 是沒有的,如下所示:

console.log([][Symbol.iterator]()); // Object [Array Iterator] {}
console.log((new Map())[Symbol.iterator]()); // [Map Entries] { }
console.log((new Set())[Symbol.iterator]()); // [Set Iterator] { }
console.log({}[Symbol.iterator]); // undefined

Symbol.iterator  是迭代協議標準中的一部分:可迭代器協議,它定義了哪些值可以被遍歷到。要成為可迭代器對象,必須實現 @@iterator 方法,可通過常量 Symbol.iterator 訪問(到這里是不是發現,原來常使用的 Array 類型竟和 Symbol 也有聯系啊

迭代協議標準的另一部分是:迭代器協議 ,它定義了產生一系列值的的標準方式。通過定義 next() 方法實現,這里不做詳細闡述,參見文檔。

了解了  Symbol.iterator 和迭代協議規則實現一個可被遍歷的對象并不難。

const range = {
start: 0,
end: 3,
[Symbol.iterator]: function() { return this },
next: function() {
if (this.start > this.end) {
return { value: undefined, done: true }
}

return { value: this.start++, done: false }
}
}

for (const id of range) {
console.log(id); // 0,1,2,3
}

除了 Symbol.iterator 還有 Symbol.asyncIterator,這個在 Node.js 后端中有一些使用場景。

責任編輯:武曉燕 來源: 編程界
相關推薦

2021-01-27 07:51:41

JSES6元素

2020-03-04 17:38:31

瀏覽器程序員CSS

2020-12-02 06:11:02

JS ES6方法

2022-07-26 09:02:15

ES6ES13ECMAScript

2010-10-20 16:43:11

SQL Server管

2022-06-01 09:06:58

ES6數組函數

2021-08-16 07:05:58

ES6Promise開發語言

2017-08-31 14:25:34

前端JavascriptES6

2020-07-01 07:58:20

ES6JavaScript開發

2018-11-06 10:51:07

Redis開發存儲系統

2020-11-16 08:10:04

ES6迭代器JavaScript

2021-07-30 07:10:07

ES6函數參數

2024-06-26 08:18:08

ES6模板字符串

2023-03-01 15:39:50

JavaScrip對象屬性ES6

2023-05-28 23:49:38

JavaScrip開發

2021-07-16 07:26:48

ES6javascript開發語言

2023-11-23 10:21:11

ECMAScriptJavaScript

2020-10-22 10:55:55

數據結構ES6前端

2017-10-09 18:21:20

JavaScriptES6ES8

2011-08-22 15:47:27

Oracle臨時表存儲過程
點贊
收藏

51CTO技術棧公眾號

欧美三级视频在线观看| 成人激情小说网站| 精品国产一区二区三区久久久 | 亚洲一区精品电影| 久久精品99久久久久久| 天堂综合网久久| 欧美三级资源在线| 国产情侣第一页| 日本高清中文字幕二区在线| 全部av―极品视觉盛宴亚洲| 欧美成人精品不卡视频在线观看| 欧亚乱熟女一区二区在线| 蜜桃成人精品| 亚洲国产精品一区二区www| 欧美日韩精品综合| 99久久一区二区| 丝袜a∨在线一区二区三区不卡| www.日韩系列| 在线观看成人动漫| 精品福利在线| 狠狠干狠狠久久| 777久久精品一区二区三区无码 | 亚洲xxxx2d动漫1| 草美女在线观看| 中文一区在线播放| 久久久久久久久一区| 国产欧美日韩综合精品一区二区三区| 麻豆精品91| 久久免费视频这里只有精品| 国产又黄又粗又猛又爽的| 免费看成人人体视频| 欧美一区二区精品在线| 91国产精品视频在线观看| 日本а中文在线天堂| 亚洲另类中文字| 制服国产精品| porn视频在线观看| 久久久久久麻豆| 狠狠色噜噜狠狠狠狠色吗综合| 夜夜爽8888| 免费不卡在线观看| 国产999精品| 日韩不卡视频在线| 99av国产精品欲麻豆| 欧美激情va永久在线播放| 国产精品视频一区二区在线观看 | 亚洲乱码一区二区三区| 日本1级在线| 久久综合成人精品亚洲另类欧美| 国产成人免费观看| 亚洲第一色视频| 国产91色综合久久免费分享| 91老司机精品视频| 国产精品自拍电影| 日本aⅴ免费视频一区二区三区| 国产999精品久久久影片官网| 亚洲男人的天堂在线视频| 日韩午夜免费视频| 91精品国产免费久久久久久 | 日本久久精品电影| 欧美精品色婷婷五月综合| 欧美调教sm| 欧美视频13p| 能在线观看的av网站| 四虎4545www国产精品| 欧美四级电影网| 日韩一区二区三区久久| 一区在线不卡| 精品国产乱码久久久久久免费| 91精品国产高清91久久久久久| 日韩一区二区三区在线看| 精品国产免费久久| 国产传媒第一页| 欧洲视频一区| 久久精品中文字幕一区| 久草免费新视频| 久久av一区| 国产美女主播一区| jizz中国女人| 99久久综合色| 亚洲蜜桃在线| 日本在线视频中文有码| 性感美女极品91精品| 久久精品.com| 亚瑟国产精品| 亚洲黄一区二区| 精品国产aaa| 欧美成人有码| 欧洲成人在线视频| 国产乱码久久久| bt7086福利一区国产| 色999日韩自偷自拍美女| 精品孕妇一区二区三区| 亚洲不卡在线观看| www欧美激情| 最新国产精品精品视频| 亚洲视频网站在线观看| 一区二区视频免费看| 国产一区二区高清| 成人精品久久一区二区三区| 隣の若妻さん波多野结衣| 久久久久久麻豆| 欧美在线观看视频免费| 偷拍中文亚洲欧美动漫| 日韩亚洲电影在线| 欧洲av一区二区三区| 欧美视频日韩| 国产精品视频精品视频| 女人18毛片一区二区三区| 国产精品理伦片| 91九色在线观看视频| 999久久久国产999久久久| 日韩精品视频三区| 日韩女优一区二区| 日本va欧美va瓶| 免费日韩av电影| 三级资源在线| 欧美日韩一区二区三区视频| 超碰97在线资源站| 欧美精品黄色| 国产在线久久久| 男人的天堂av高清在线| 亚洲成人免费观看| 国产资源中文字幕| 超碰成人久久| 日韩免费视频在线观看| 黄色片一区二区三区| 亚洲人妖av一区二区| 国产一级做a爰片久久| 要久久爱电视剧全集完整观看| 欧美激情国产日韩精品一区18| 中国一级片黄色一级片黄| 久久五月婷婷丁香社区| 欧洲精品一区二区三区久久| 久久伊人影院| 久久伊人色综合| 亚洲综合网av| 一区二区中文视频| 日本在线一二三区| 日韩精品诱惑一区?区三区| 国产成人avxxxxx在线看 | 92精品国产成人观看免费| 波多野结衣与黑人| 欧美视频二区欧美影视| 欧美大胆在线视频| 国产美女裸体无遮挡免费视频| 日本一区二区视频在线| 男人靠女人免费视频网站| 久久婷婷国产| 性色av一区二区三区| 亚洲日本国产精品| 精品国产户外野外| 爱爱的免费视频| 亚洲综合精品| 日韩wuma| 欧美一级做a| 久久久精品视频成人| wwwxxxx国产| 亚洲国产裸拍裸体视频在线观看乱了 | 国产黄色片在线| 久久国产剧场电影| 超碰超碰超碰超碰超碰| 国产毛片久久久| 欧美亚洲在线观看| 成人一区二区不卡免费| 欧美性大战久久久久久久蜜臀| 五月婷六月丁香| 精品在线亚洲视频| 久久综合亚洲精品| 国产极品模特精品一二| 欧美怡红院视频一区二区三区| 久久经典视频| 欧美男同性恋视频网站| 69av.com| 久久久99久久| 国产乱女淫av麻豆国产| 欧美日韩免费| 欧美日韩在线高清| 欧美一级在线| 91精品成人久久| 在线免费看a| 日韩欧美激情在线| 天天爽夜夜爽人人爽| 中文字幕欧美日韩一区| 人妻巨大乳一二三区| 妖精视频成人观看www| 亚洲 国产 欧美一区| 中文字幕一区二区三区四区久久| 日本精品在线视频| 中文在线手机av| 亚洲午夜av久久乱码| 国产按摩一区二区三区| 日韩欧美在线视频观看| 欧美第一页在线观看| 成人手机在线视频| www亚洲成人| 影音国产精品| 自拍视频一区二区三区| 欧美日韩夜夜| 亚洲精品欧美极品| 最新日韩三级| 国产最新精品视频| 国产一二区在线| 国产丝袜一区二区| www.激情五月| 欧美日韩中文字幕一区二区| 中文字幕一区二区三区精品| 1024成人网| 国产精品免费无码| 不卡欧美aaaaa| 一级黄色片在线免费观看| 蜜桃久久av| 亚洲熟妇无码av在线播放| 日韩欧美字幕| 欧美在线视频二区| 欧美日韩一本| 国产精品青青草| 日韩三级精品| 91精品免费久久久久久久久| xx欧美视频| 91精品国产91久久久| 日本在线观看高清完整版| 日韩在线视频免费观看高清中文| 四虎精品在永久在线观看| 欧美成人bangbros| 国产乱淫av免费| 欧美日韩精品福利| 香蕉污视频在线观看| 欧美日韩亚洲天堂| 日韩黄色在线视频| 亚洲制服丝袜av| 欧美成人黄色网| 亚洲三级视频在线观看| 中国特黄一级片| 欧美国产综合色视频| xxx在线播放| 久久久久久久综合色一本| aa一级黄色片| 久久蜜桃香蕉精品一区二区三区| 国产精品成人无码专区| 国产成人精品综合在线观看 | 久久精品精品电影网| jzzjzzjzz亚洲成熟少妇| 国产一区av在线| porn视频在线观看| 最近免费中文字幕视频2019| 在线观看免费版| 俺去了亚洲欧美日韩| 91精品专区| xxx欧美精品| 超碰超碰在线| 欧美黑人一区二区三区| 国产精品186在线观看在线播放| 欧美俄罗斯性视频| 超碰在线最新网址| 欧美在线亚洲在线| 视频在线日韩| 成人做爽爽免费视频| 日韩黄色av| 精品国产一区二区三区麻豆免费观看完整版 | 91亚洲精品一区二区乱码| 中文成人无字幕乱码精品区| 91免费精品国自产拍在线不卡| 51调教丨国产调教视频| 久久久夜色精品亚洲| 亚洲欧美va天堂人熟伦| 国产精品电影院| 欧美丰满艳妇bbwbbw| 亚洲不卡av一区二区三区| 日日骚av一区二区| 欧美美女黄视频| 懂色av一区二区三区四区| 亚洲第一精品夜夜躁人人爽 | 欧美 日韩 国产 激情| 麻豆一区二区99久久久久| 久久成年人网站| 成人午夜电影网站| 一区二区三区四区免费| 国产精品不卡在线| 国产奶水涨喷在线播放| 欧美午夜精品久久久久久超碰| 国产免费视频一区二区三区| 亚洲国产精品成人av| wwwxxx在线观看| 欧美日韩国产第一页| 国产精品专区免费| 91影视免费在线观看| 四虎884aa成人精品最新| 亚洲国产精品日韩| 激情综合在线| 天天干在线影院| 成人福利视频在线| 老司机深夜福利网站| 亚洲成人福利片| 伊人网站在线观看| 日韩精品在线网站| 黄色大片在线免费观看| 欧美大荫蒂xxx| 在线成人视屏| 国产精品区一区| 99re66热这里只有精品8| 噜噜噜久久亚洲精品国产品麻豆| 久久99精品久久久| 亚洲人人夜夜澡人人爽| 伊人夜夜躁av伊人久久| 中文字幕 国产精品| 日韩欧美一区二区免费| 午夜视频在线| 国产91色在线|| 麻豆视频一区| 国内自拍中文字幕| 蜜桃在线一区二区三区| 9.1成人看片| 亚洲国产视频一区| 国产视频在线观看免费| 中文字幕欧美精品在线| 中文字幕在线免费观看视频| yy111111少妇影院日韩夜片| 日韩在线中文| 国产超碰在线播放| 久久婷婷久久一区二区三区| 欧美精品一区二区成人| 欧美疯狂做受xxxx富婆| 3p在线观看| 日本视频久久久| 亚洲第一福利社区| 秋霞无码一区二区| 顶级嫩模精品视频在线看| 51精品免费网站| 欧美精品日韩综合在线| av在线免费观看网| 国产精品久久91| 国产欧美日韩| 日韩免费高清在线| 国产日韩欧美亚洲| 天干夜夜爽爽日日日日| 亚洲精品中文字幕av| 英国三级经典在线观看| 国产综合欧美在线看| 国产情侣久久| 国产精品久久久免费观看| 图片区小说区国产精品视频 | 尤物九九久久国产精品的分类 | wwwwww日本| 欧美三级xxx| 国产黄色免费在线观看| 国产xxx69麻豆国语对白| 国产99精品| 欧美伦理片在线看| 国产精品入口麻豆原神| 亚洲综合精品视频| 欧美久久精品午夜青青大伊人| 国产精品一区二区三区av | 日韩激情av| 国产高清自拍99| a91a精品视频在线观看| 亚洲av成人片色在线观看高潮 | 97色在线视频观看| 亚洲视频分类| 最新中文字幕2018| 亚洲丝袜另类动漫二区| 精品国产无码一区二区| 国内精品视频一区| 一区二区三区四区在线看| 爆乳熟妇一区二区三区霸乳| 国产精品不卡一区二区三区| 99久久婷婷国产一区二区三区| 欧美老少配视频| 免费看久久久| 制服丝袜综合网| 亚洲精品视频自拍| 日韩大片b站免费观看直播| 国产精品日韩欧美| 欧美女人交a| 黄色正能量网站| 欧美日韩国产免费一区二区| 欧美人与禽性xxxxx杂性| 久久婷婷国产综合尤物精品| 热久久国产精品| 久久精品视频国产| 夜夜嗨av一区二区三区四区| 99精品视频在线免费播放| 福利视频一区二区三区四区| 久久久久99精品一区| 国产成人免费看一级大黄| 日本久久精品视频| 性xxxx欧美老肥妇牲乱| 国产精品无码专区| 欧美日韩亚洲综合在线| 91九色美女在线视频| 亚洲高清资源综合久久精品| 国产91精品露脸国语对白| 在线免费观看国产精品| 欧美韩国理论所午夜片917电影| 亚洲精品亚洲人成在线观看| 在线一区二区不卡| 一本到不卡精品视频在线观看| jizz性欧美| 日韩精品一区二区三区丰满| 成人性生交大片免费|