ES6学习笔记(四)【正则,集合】

本文介绍了ES6中新增的正则表达式特性、四种数据结构(Set、Map、WeakSet、WeakMap)以及Symbol类型的使用方法。同时探讨了这些新特性的实际应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

ES6对正则的扩展不多,而且几乎全都是用不到的扩展

这一节内容会很少,但是正则依旧很常用,很重要

正文

ES6为正则表达式新增了flags属性,会返回正则表达式的修饰符

/abc/ig.flags
// 'gi'

以前,js只支持先行断言(lookahead)和先行否定断言(negative lookahead)

不支持后行断言(lookbehind)和后行否定断言(negative lookbehind)

而在其他脚本语言(PHP,Python等)中,都支持后行断言和后行否定断言

因此现在有一个提案,未来版本的js中会加入这一缺失的功能,V8 引擎已经支持此功能

思考

这部分内容希望你都可以手动敲一遍,独立思考

了解正则中的先行、后行断言么,试着Google一下了解这个知识点


多数主流编程语言都提供了若干种复杂数据结构,而在ES6以前,js只有数组和对象两种

ES6为了弥补这一方面的不足,引入了四种新的数据结构

它们分别是:映射(Map)、集合(Set)、弱集合(WeakSet)和弱映射(WeakMap)

正文

Set类似数组,但是成员的值都是唯一的,没有重复的值

let set = new Set([1, 2, 3, 3])
console.log(set)
// Set(3) {1, 2, 3}
[...set]
// [1, 2, 3]

我们可以通过给Set构造函数传入一个数组来创建一个set,数组中的重复值被自动删除

set常用的方法不多,常见的有以下几种

  • add(value):添加某个值,返回Set结构本身
  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功
  • has(value):返回一个布尔值,表示该值是否为Set的成员
  • clear():清除所有成员,没有返回值

另外,set通过size属性拿到内部成员的个数,而不是数组的length

let set = new Set()
set.add(1).add(2).add(2)
set.size // 2
set.delete(2)
set.has(2) // false
set.clear()
set.size() // 0

数组的forEach方法也可以用来遍历set,用法相同这里不再叙述

Map类似二维数组,是键值对的集合,但是书写方式稍微有不同

let map = new Map([
  ['a', '1'],
  ['b', '2']
])
console.log(map)
// Map(2) {"a" => "1", "b" => "2"}

与Set相同,Map也用size属性表示内部有多少个键值对

但是从Map中新增,获取值使用set,get方法,其他的has,delete方法与Set相同

let m = new Map()
let o = {p: 'Hello World'}

m.set(o, 'content')
m.get(o) // "content"

m.has(o) // true
m.delete(o) // true
m.has(o) // false

对比js对象的优势是,Map可以使用任意值作为键值,包括对象(上面代码中的o)

WeakSetWeakMap不常用,顾名思义,可以理解为更弱的Set和Map,功能少,而且容易被垃圾回收(内存消耗低)

思考

这部分内容希望你都可以手动敲一遍,独立思考

使用Set写一个数组去重的方法

接受一个数组参数,并返回一个没有重复值的原数组


let set = new Set()
let a = NaN
let b = NaN
let c = {}
let d = {}
set.add(a).add(b).add(c).add(d)

此时set.size应该输出几?试着解释为什么会是这个结果


ES6引入了一种新的原始数据类型Symbol,表示独一无二的值

它是JavaScript语言的第七种数据类型,前六种是:

Undefined、Null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)

正文

Symbol值与字符串类似,可以当做对象的属性名

因为Symbol都是独一无二的,所以可以保证不会与其他属性名产生冲突

Symbol值通过Symbol函数生成,Symbol函数可以接受一个字符串作为参数,表示对Symbol的描述

主要用于调试的时候方便区分不同的Symbol值

let aaa = Symbol('a')
let bbb = Symbol('b')

let obj = {
  [aaa]: 'Hello!',
  [bbb]: 'World!'
}

console.log(obj)
// Object {Symbol(a): "Hello!", Symbol(b): "World!"}
obj[aaa]
// "Hello!"
obj[bbb]
// "World!"

思考

这部分内容希望你都可以手动敲一遍,独立思考

如何判断一个值是否是Symbol

试着写出一个function,接受一个任意值作为参数,返回它的数据类型

数据类型一共七种,在本节的简介里提到过

内容概要:该论文聚焦于T2WI核磁共振图像超分辨率问题,提出了一种利用T1WI模态作为辅助信息的跨模态解决方案。其主要贡献包括:提出基于高频信息约束的网络框架,通过主干特征提取分支和高频结构先验建模分支结合Transformer模块和注意力机制有效重建高频细节;设计渐进式特征匹配融合框架,采用多阶段相似特征匹配算法提高匹配鲁棒性;引入模型量化技术降低推理资源需求。实验结果表明,该方法不仅提高了超分辨率性能,还保持了图像质量。 适合人群:从事医学图像处理、计算机视觉领域的研究人员和工程师,尤其是对核磁共振图像超分辨率感兴趣的学者和技术开发者。 使用场景及目标:①适用于需要提升T2WI核磁共振图像分辨率的应用场景;②目标是通过跨模态信息融合提高图像质量,解决传统单模态方法难以克服的高频细节丢失问题;③为临床诊断提供更高质量的影像资料,帮助医生更准确地识别病灶。 其他说明:论文不仅提供了详细的网络架构设计与实现代码,还深入探讨了跨模态噪声的本质、高频信息约束的实现方式以及渐进式特征匹配的具体过程。此外,作者还对模型进行了量化处理,使得该方法可以在资源受限环境下高效运行。阅读时应重点关注论文中提到的技术创新点及其背后的原理,理解如何通过跨模态信息融合提升图像重建效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值