一、Map和Set集合

const profiles = new Map()
profiles.set( 'twitter','@adalovelance')
profiles.set( 'facebook','adalovelance')
profiles.seize
profiles.has('twitter')
profiles.get('twitter')
profiles.has('youtube')//false
profiles.delete('facebook')
for (const entry of profiles){console.log(entry)
}

Map真正有趣的地方是使用函数和对象作为key,而这时使用普通对象不可能完成的事情,因为对象的所有key都会自动转换为字符串。该功能带来了新的可能性。例如,我们可以利用此功能建立一个微测试框架:

const tests =  new Map()
tests.set(()=>2+2,4)
tests.set(()=>2*2,4)
tests.set(()=>2/2,1)
for(const entry of tests){console.log((entry[0]()===entry[1])?'PASS':'FAIL')
}

set原型 可以用于轻松构建集合,一个所有值都唯一的列表

const s = new Set([0,1,2,3])
s.add(3)//will not be added
s.delete(0)
s.has(0)
for(const entry of s){console.log(entry)
}

二、WeakMap和WeakSet集合

同Map的差异
1、没办法迭代所有条目,只允许对象作为主键。
2、当它内部只剩下引用时,对象作为主键可以用来进行垃圾回收。当我们存储一个对象关联的元数据,而该对象在应用程序的正常生命周期可能被删除时,这个功能将非常有用

const s = new Set([0,1,2,3])
let obj ={}
const map = new WeakMap()
map.set(obj,{key:"some_value"})
console.log(map.get(obj))
obj = undefined// 被垃圾回收了

和WeakMap类似,WeakSe是Set的弱版本:它暴露出和Set相同的接口,但它只允许存储对象且不能重复
WeakSet允许内部对象在只剩下引用的时候被垃圾回收:

let obj1 = {key: "val1"}
let obj2 = {key: "val2"}
const set = new WeakSet([obj1,obj2])
console.log(set.has(obj1))
obj1 = undefined// obj1 被移除
console.log(set.has(obj1))//false

三、模板字面量

ES6提供更强大的语法来定义字符串:模板字面量。这个语法使用反引号(`)作为分隔符
好处:
1、允许字符串中使用${experssion}插入变量或表达式
2、单个字符串可以轻松写在多行

const name= "Leonardo"
const interests = ["arts","architecture","science","music","mathematics"]
const birth = { year:1452, place: 'Florence'}
const text = `${name} was an Italian polymathinterested in many topics such as${interests.join(',')}. He was born in ${birth.year} in ${birth.place}.`
const.log(text)

NodeJS设计模式( 二 )相关推荐

  1. 【白话设计模式二】外观模式(Facade)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  2. 【白话设计模式二十二】解释器模式(Interpreter)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  3. 「设计模式(二) - 观察者模式」

    「设计模式(二) - 观察者模式」 一.回复TD退订 日常生活中,这种短信无处不在,各种广告,在互联网高速发展的今天,个人信息可以说是透明的.没有任何隐私可言,类似这种通知其实跟我们开发过程使用的观察 ...

  4. c语言 适配器模式例子,NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】...

    NodeJS设计模式总结[单例模式,适配器模式,装饰模式,观察者模式] 发布时间:2020-08-21 03:08:03 来源:脚本之家 阅读:117 作者:lucky芬 本文实例讲述了NodeJS设 ...

  5. java设计模式 (二) 创建模式

    java设计模式 (二) 创建型模式 单例模式 Singleton pattern 现实场景 双11, 小华收快递, 早上圆通快递叫他下楼收快递, 刚上来, 顺丰快递叫他下楼收快递,.然后没多久EMS ...

  6. NodeJS笔记二---kalrry

    NodeJS笔记二---kalrry NodeJS 服务器 什么是服务器 web服务端保存的资源: web服务器(软件)的作用: nodeJS 介绍 目标 优势 劣势 特点: 环境安装 版本 运行 w ...

  7. 大话设计模式(二)代理模式

    大话设计模式(二)代理模式 前言 代理模式(Proxy Pattern)是GoF 23种Java常用设计模式之一.代理模式的定义:Provide a surrogate or placeholder ...

  8. nodejs生成二维码

    二维码在生活中无处不在,之前我也使用过java的zxing库生成过二维码,功能很强大. 但是其实nodejs上也有很多第三方库能够生成二维码.今天我们就是使用qrcode这个库来生成二维码. 效果展示 ...

  9. nodejs之二维码扫描-实现兑换码自动核销

    nodejs二维码扫描-实现兑换码自动核销 背景 实现概述 开发环境 相关依赖 微信网页授权 第一步:用户同意授权,获取code 第二步:通过code换取网页授权access_token 第三步:拉取 ...

最新文章

  1. AtCoder Beginner Contest 215 F - Dist Max 2
  2. PLSQL_性能优化系列20_Oracle Result Cash结果缓存
  3. SpringBoot 使用 Caffeine 本地缓存
  4. 阮一峰的JavaScript 的 this 原理
  5. [noip2017]列队 splay
  6. spark学习-50-Spark的stage的划分
  7. mysql自动填充_Mysql自动填充测试数据
  8. linux下文件编码的查看与转换(转)
  9. Uncaught TypeError: Cannot read property 'tagNa...
  10. POJ 3667 Hotel (线段树区间合并)
  11. ssdp协议 upnp_【零知ESP8266】教程:SSDP简单服务发现协议示例
  12. 浅学DSP原理及应用
  13. iscsi发起程序chap_iSCSI,iSCSI发起程序,仲裁配置和SQL Server群集安装
  14. 深度残差网络+自适应参数化ReLU激活函数:调参记录2
  15. 三星android手机工程模式设置中文,三星工程模式怎么进入?三星手机进入工程模式方法...
  16. 上海数据交易中心交易系统开放
  17. android 画三角形
  18. web前端面试题之魂(js)
  19. Eclipse中Java项目转化为Java Web项目
  20. Win10设置局域网共享打印机,动态切换默认打印机总结

热门文章

  1. 第14届计算机设计大赛获奖情况,我校学子在第14届中国大学生计算机设计大赛中南赛区再创佳绩...
  2. Python matplot画柱状图(一)
  3. macOS Ventura 13.0.1 (22A400)恢复版镜像
  4. 搜狗收录查询-搜狗排名查询
  5. C1: 什么是基金? 5大基金类型
  6. 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(二)
  7. MyZip Pro 1.2.4 中文版 多线程解压缩软件
  8. SpringCloud学习记录(1)-父工程与子模块创建及子模块调用
  9. 超神学院德诺计算机,超神学院:扒一扒隐藏起来的人物,德诺星系的人有没有活下来的?...
  10. 77.Oozie的HA启用