ES6学习笔记9 Symbol、Set和Map

为什么我把「大模型Clouder认证:基于百炼平台构建智能体应用」作为大模型学习的第一站?从 0 到拿证全流程经验分享 【摘要】作为一个刚拿下「大模型 Clouder 认证:基于百炼平台构建智能体应用」的过来人,想在开头就和大家聊聊这个认证的特殊意义 —— 在企业加速 AI 落地的今天,能用低代码快速构建智能体应用,已经成为 AI 从业者的核心竞争力。无论是企业微信客服提效、钉钉机器人自动化办公,还是网站智能助手升级,这些场景化能力正是当下数字化转型的刚需。 阅读详情

Symbol

ES6引入一种新的数据类型Symbol,表示独一无二的值。Symbol值通过Symol函数生成,可传入一个字符串参数,表示对Symbol实例的描述(即使两个Symbol描述相同,值也不同),用于区分不同的Symbol值。

let s1 = Symbol('foo');
let s2 = Symbol('bar');

s1 // Symbol(foo)
s2 // Symbol(bar)

s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(bar)"

Symbol函数不能使用new命令,如果Symbol函数的参数是一个对象,则会调用该对象的toString方法,将其转换为字符串,再生成一个Symbol值

Symbol 值不能与其他类型的值进行运算,但可以转换为字符串和布尔值

let sym = Symbol('My symbol');

"your symbol is " + sym
// TypeError: can't convert symbol to string
`your symbol is ${sym}`
// TypeError: can't convert symbol to string
let sym = Symbol('My symbol');

String(sym) // 'Symbol(My symbol)'
sym.toString() // 'Symbol(My symbol)'
let sym = Symbol();
Boolean(sym) // true
!sym  // false

symbol可以作为对象属性名,这样就保证不会与其他属性名产生冲突。Symbol作为对象属性名时不能使用点运算符,其必须放在方括号中。

 
let mySymbol = Symbol();

// 第一种写法
let a = {};
a[mySymbol] = 'Hello!';

// 第二种写法
let a = {
  [mySymbol]: 'Hello!'
};

// 第三种写法
let a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });

// 以上写法都得到同样结果
a[mySymbol] // "Hello!"

Symbol 作为属性名,该属性不会出现在for...in、for...of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回,但可以通过Object.getOwnPropertySymbols()方法,来获取指定对象的所有Symbol属性名。

const obj = {};
let a = Symbol('a');
let b = Symbol('b');

obj[a] = 'Hello';
obj[b] = 'World';

const objectSymbols = Object.getOwnPropertySymbols(obj);

objectSymbols
// [Symbol(a), Symbol(b)]

如果需要使用同一个Symbol值,可以通过Symbol.for方法。它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的 Symbol 值。如果有,就返回这个 Symbol 值,否则就新建并返回一个以该字符串为名称的 Symbol 值。

let s1 = Symbol.for('foo');
let s2 = Symbol.for('foo');

s1 === s2 // true

Symbol.for()与Symbol()这两种写法,都会生成新的 Symbol。它们的区别是,前者会被登记在全局环境中供搜索,而后者不会。

Symbol.keyFor()方法返回一个已登记的 Symbol 类型值的key。若Symbol不是通过Symbol.for()创建的,则返回undefined。

let s1 = Symbol.for("foo");
Symbol.keyFor(s1) // "foo"

let s2 = Symbol("foo");
Symbol.keyFor(s2) // undefined

Symbol.for创建 Symbol 值登记的名字,是全局环境的,可以在不同的 iframe 或 service worker 中取到同一个值。

Set

ES6提供了set数据结构,其类似于数组,但成员的值都是唯一的,没有重复,有点像Python的元组。set函数可以接受一个数组(或具有iterable接口的数据结构),用来初始化,其自动去除重复的值。

const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]

// 例二
const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
items.size // 5

// 例三
const set = new Set(document.querySelectorAll('div'));
set.size // 56

在set结构中,NaN等于自身,且两个对象总是不等的

let set = new Set();
let a = NaN;
let b = NaN;
set.add(a);
set.add(b);
set // Set {NaN}
let set = new Set();

set.add({});
set.size // 1

set.add({});
set.size // 2

set实例的属性:

  • Set.prototype.constructor : 构造函数
  • Set.prototype.size : 返回set实例的成员总数

set实例的方法:

  • add(value) : 添加某个值,返回Set结构本身
  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功
  • has(value):返回一个布尔值,表示参数是否为set成员
  • clear():清除所有成员,没有返回值
  • keys():返回键名的遍历器,由于set结果没有键名,故返回键值
  • values():返回键值的遍历器
  • entries():返回键值对的遍历器,由于set结果没有键名,故返回两个相同键值组成的数组
  • forEach():使用回调函数遍历每个成员,没有返回值
s.add(1).add(2).add(2);
// 注意2被加入了两次

s.size // 2
s.has(1) // true
s.has(2) // true
s.has(3) // false

s.delete(2);
s.has(2) // false
let set = new Set(['red', 'green', 'blue']);

for (let item of set.keys()) {
  console.log(item);
}
// red
// green
// blue

for (let item of set.values()) {
  console.log(item);
}
// red
// green
// blue

for (let item of set.entries()) {
  console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]

也可以省略values方法,直接用for...of循环遍历,或者使用扩展运算符

for (let x of set) {
  console.log(x);
}
// red
// green
// blue

let set = new Set(['red', 'green', 'blue']);
let arr = [...set];
// ['red', 'green', 'blue']

利用扩展运算符,可以间接地使用数组的map和filter方法

let set = new Set([1, 2, 3]);
set = new Set([...set].map(x => x * 2));
// 返回Set结构:{2, 4, 6}

let set = new Set([1, 2, 3, 4, 5]);
set = new Set([...set].filter(x => (x % 2) == 0));
// 返回Set结构:{2, 4}

通过filter方法可以实现并集(Union)、交集(Intersect)和差集(Difference)

let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);

// 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}

// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}

// 差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}

如果想在遍历过程中改变原来Set的结构,有两种方法。第一种是利用原Set结构映射出一个新的Set,然后覆盖原有的值。另外一种方法就是利用Array.from方法。

// 方法一
let set = new Set([1, 2, 3]);
set = new Set([...set].map(val => val * 2));
// set的值是2, 4, 6

// 方法二
let set = new Set([1, 2, 3]);
set = new Set(Array.from(set, val => val * 2));
// set的值是2, 4, 6

WeakSet

WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别。

第一个区别是WeakSet 的成员只能是对象,而不能是其他类型的值。第二个区别是WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。因此WeakSet不可遍历,且不具有size属性。

使用WeakSet构造函数创建实例,接受一个数组或类似组对象(具有iterable接口)作为参数,该数组的所有成员都会成为WeakSet实例的成员。

const a = [[1, 2], [3, 4]];
const ws = new WeakSet(a);
// WeakSet {[1, 2], [3, 4]}

方法

  • WeakSet.prototype.add(value) : 添加一个成员
  • WeakSet.prototype.delete(value) : 删除一个指定成员
  • WeakSet.prototype.has(value) : 返回一个布尔值,表示某个值是否存在于实例中
const ws = new WeakSet();
const obj = {};
const foo = {};

ws.add(window);
ws.add(obj);

ws.has(window); // true
ws.has(foo);    // false

ws.delete(window);
ws.has(window);    // false
WeakSet 的一个用处,是储存 DOM 节点,而不用担心这些节点从文档移除时,会引发内存泄漏。


Map

ES6引入Map数据结构,其与JS的对象类似,区别在于其"键"的范围不限于字符串,各种类型的值都可以当做键。而对象则是字符串-值结构。

使用Map构造函数创建实例,其可以接受一个键值对数组(任何具有iterable接口,成员为双元素数组的数据结构都可以,包括Set和Map)作为初始化参数

const map = new Map([
  ['name', '张三'],
  ['title', 'Author']
]);

map.size // 2
const set = new Set([
  ['foo', 1],
  ['bar', 2]
]);
const m1 = new Map(set);
m1.get('foo') // 1

const m2 = new Map([['baz', 3]]);
const m3 = new Map(m2);
m3.get('baz') // 3

属性

  • size : 返回Map结构的成员总数

方法

  • set(key, value):设置键名key对应的键值为value,返回Map,若键名已存在,则对应的键值将被更新
  • get(key) : 返回key的键值,找不到,返回undefined
  • has(key) : 查找对应的键,存在返回true,否则为false
  • delete(key) : 删除某个键,成功返回true,否则返回false
  • clear():清除所有成员
  • keys():返回键名的遍历器
  • values():返回键值的遍历器
  • entries():返回键值对的遍历器
  • forEach():遍历Map的所有成员
const m = new Map();

m.set('edition', 6)        // 键是字符串
m.set(262, 'standard')     // 键是数值
m.set(undefined, 'nah')    // 键是 undefined
const map = new Map([
  ['F', 'no'],
  ['T',  'yes'],
]);

for (let key of map.keys()) {
  console.log(key);
}
// "F"
// "T"

for (let value of map.values()) {
  console.log(value);
}
// "no"
// "yes"

for (let item of map.entries()) {
  console.log(item[0], item[1]);
}
// "F" "no"
// "T" "yes"

// 或者
for (let [key, value] of map.entries()) {
  console.log(key, value);
}
// "F" "no"
// "T" "yes"

// 等同于使用map.entries()
for (let [key, value] of map) {
  console.log(key, value);
}
// "F" "no"
// "T" "yes"

Map转换为其他数据结构

  • Map转化为数组          map转换为数组的最便捷方法就是使用扩展运算符(...)
const map = new Map( [ [a,1],[b,2] ] );
[...map]
//[ [a,1],[b,2] ]
  • 数组转换为Map             将数组传入Map函数就可以,转换为Map
  • Map转换为对象
主要思路就是新建一个对象,复制Map结构的字符串键值
function objToStrMap(obj) {
  let strMap = new Map();
  for (let k of Object.keys(obj)) {
    strMap.set(k, obj[k]);
  }
  return strMap;
}
  • 对象转换为Map
function objToStrMap(obj) {
  let strMap = new Map();
  for (let k of Object.keys(obj)) {
    strMap.set(k, obj[k]);
  }
  return strMap;
}
  • Map转换为JSON

分为两种情况,当map键名全是字符串时,先转为对象,再使用JSON.stringify()方法。若键值有非字符串,则将其转为数组后,再使用JSON.stringify()方法。

function strMapToJson(strMap) {
  return JSON.stringify(strMapToObj(strMap));
}
function mapToArrayJson(map) {
  return JSON.stringify([...map]);
}
  • JSON转换为Map
由于键名是字符串,直接调用JSON.parse()方法,再转为map。当为JSON数组时,先调用JSON.parse()方法,再将其传入map构造函数即可
function jsonToStrMap(jsonStr) {
  return objToStrMap(JSON.parse(jsonStr));
}
function jsonToMap(jsonStr) {
  return new Map(JSON.parse(jsonStr));
}

WeakMap

WeakMap与map结构类似,区别在于WeakMap只接受对象(null除外)作为键名,且其键名不计入垃圾回收机制(键值正常),因此它没有size属性,也不支持各种遍历方法,同时也没有clear方法,只有四个方法可用:set(),get(),has(),delete()

WeakMap 应用的典型场合就是 DOM 节点作为键名

let myElement = document.getElementById('logo');
let myWeakmap = new WeakMap();

myWeakmap.set(myElement, {timesClicked: 0});

myElement.addEventListener('click', function() {
  let logoData = myWeakmap.get(myElement);
  logoData.timesClicked++;
}, false);

上述代码中,每当myElement这个DOM节点被点击时,timeClicked就被更新一次,当这个DOM节点被删除时,该状态自动消失,不存在内存泄漏风险

除此之外,注册监听事件的对象也很可以用WeakMap实现

const listener = new WeakMap();

listener.set(element1, handler1);
listener.set(element2, handler2);

element1.addEventListener('click', listener.get(element1),false);
element2.addEventListener('click', listener.get(element2),false);
上述代码,一旦DOM对象消失,与它绑定的事件函数也会随之消失



本地部署 pyvideotrans(视频翻译配音工具) 语音识别选择faster-whisper(本地),模型选择预先下载并保存的medium,然后选择好要处理的视频以及保存到的位置,这里我选择了一个名为why not的英文演讲视频,保存在桌面_vedio_out文件下。将附件中faster-medium.7z 和 faster-small.7z解压到项目中的models目录下, 解压后,目录中应该存在 models--Systran--faster-whisper-small。en.m4a|.wav = 原始视频中的音频文件(包含所有背景音和人声) 阅读详情

相关推荐

Windows10下部署Heygem进行数字人生成

对于使用Heygem生成数字人,需要注意几个问题: + 需要使用Nvidia的显卡。 + 需要在Windows上进行本地部署。主要原因为客户端是Windows的,客户端对上传的视频写入硬编码的`D:\heygem_data\voice\data`目录,需要在容器上读取这些文件。 + 需要在Windows上部署Docker,将Windows的目录映射到容器中,由容器中的服务进行读取。 + 需要特别注意,一定要有D盘,这个D盘是Windows的D盘,不能是插入的USB设备后产生的D盘。 + 需要下载3个Doc

冀辉的博客 5619

深入理解ES6--Set、Map及Symbol

Set集合和Map集合 Set集合是一种无重复元素的列表,通常用来检测给定的值在某个集合中是否存在;Map集合内含多组键值对,通常用来缓存频繁取用的数据。 ES5中的问题 var map = Object.create(null) map[5] = 'foo' console.log(map[5], map['5']) // 'foo' 'foo' let key1 = {...

李刚的学习专栏 1165

Apple 网页 SRP 登录系列文章(四):Hashcash 工作量证明与完整登录流程

本文是Apple SRP登录系列文章的收官之作,重点解析了Apple独有的Hashcash工作量证明机制并展示了完整的登录流程实现。文章详细介绍了Hashcash的安全目的、格式标准、计算核心算法及难度评估方法,特别提供了Python实现代码。同时还讲解了如何动态获取服务器Hashcash参数以及建立容错机制。最后呈现了完整的Apple SRP登录主函数架构,为开发者提供了从理论到实践的全面指导。全文通过代码示例和流程分析,系统性地阐述了Apple安全登录机制的技术细节。

Sayid_Des的专栏 629

一文带你看懂ES6中的Set,Map,Symbol

前言 随着2020年的带来,JS基本类型也增加到了7种,Bigint这个玩意说起来也挺好理解的,再加上undefined, null, string, number, boolean,相对于引用类型,都是比较好明白的。哎等会,好像少了一个,Symbol这个ES6新增的东西到底有啥用呢? 你在开发中用过么 对于还没接触工作,各种玩具工作,抄人代码的我来说,Symbol这玩意我真没用过。看看它同时代的...

eswang的优快云博客 1829

手机拍照也能玩高光谱?教你用TensorFlow Lite在Android上实现实时RGB转高光谱

本文介绍了如何利用TensorFlow Lite在Android设备上实现实时RGB到高光谱的图像重构技术。通过深度学习模型优化和移动端部署策略,使智能手机具备专业级光谱分析能力,适用于农业检测、化妆品分析等多个领域。

weixin_29091105的博客 247

AntV G6避坑指南:折叠树状图那些意想不到的BUG(附解决方案)

本文深入剖析了在React项目中使用AntV G6实现折叠树状图时,从图标错乱、数据同步到状态管理的常见BUG与解决方案。文章基于实战经验,详细解读了G6的内部机制,提供了从环境配置、自定义节点绘制到事件处理与性能优化的完整避坑指南,帮助开发者彻底解决折叠展开功能的疑难杂症。

wasm7browser的博客 256

ES6中的const,set,map,Symbol

const,常量声明者 01-只在当前的代码块有效 02-作用域不会被提升 03-在一个作用域里不能重复声明 04-申明的常量必须立即赋值 05可以改变堆区的对象内容,不能修改栈区的地址(和其他语言如Java类似) <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title

Lawliet 451

5分钟搞定PaddleOCR PP-OCRv5环境搭建:从安装到第一个识别Demo

本文提供了一份详细的PaddleOCR PP-OCRv5环境搭建与快速入门指南。通过清晰的步骤,指导读者在5分钟内完成从创建Python虚拟环境、安装PaddlePaddle框架和PaddleOCR库,到编写并运行第一个OCR识别Demo的全过程,帮助开发者快速体验最新的PP-OCRv5模型的文字识别能力。

sprite的博客 1267

es6中的symbol-set-map

1.Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。---------------------------------------------------------------------------------...

aliven1的博客 443

MATLAB实战:用Costas环和Gardner环搞定QPSK同步问题(附完整代码)

本文详细介绍了如何使用MATLAB实现Costas环和Gardner环联合解决QPSK同步问题,包括载波同步和定时同步的技术原理、MATLAB代码实现及性能分析。通过完整的仿真示例和工程实践建议,帮助读者掌握QPSK同步技术的核心要点,提升数字通信系统的解调性能。

agile9scrum的博客 691

DSP开发环境及工具之CCS

CCS( Code Composer Studio)是美国德州仪器(TI)公司的嵌入式处理器的开发环境,可以用于TI公司的各个系列处理器的软件开发和调试,如DSP,MCU,ARM等。CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件。从其名称可以看出,该文件的作用是指明如何链接程序的。编辑完C语言设置,添加cmd文件之后,然后检查编译配置选项。主要的操作都是在这个窗口之间做相应的切换。

小柚子的博客 4311

ES6 中 Symbol 怎么用?示例详解

Symbol 主要用于解决命名冲突的问题,特别是在编写大型应用或库时,可以帮助开发者避免无意间覆盖或访问到对象的内部属性。同时,它也为 JavaScript 提供了一种实现私有属性的间接途径。

大剑师兰特的GIS世界 1306

MMCVDeformConv2d转TensorRT记录

MMCVDeformConv2d转Tensorrt

qq_35435798的博客 1779

es6 set,map,symbol

ES6的Set、Map、Symbol ES6提供了两个新的引用数据类型 set 和 map set: 新的数据结构,可以理解为集合。类似于数组,set的值都是唯一的。但是不能使用索引来获取元素 定义: new Set();//创建一个空的set new Set(arr);//创建一个有值的set 属性和应用: delete: 删除一个值。返回布尔值。true:删除成功 false:删除失败 let arr = [1, 2, 3, 4, 5]; let set = new Set(arr);

weixin_47231472的博客 443

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

前端学习9—ES6

Symbol() 函数前不能使用 new 命令,因为生成的 Symbol 是一个原始类型的值,不是对象,所以不能使用 new 命令来调用如果用 Symbol 定义的对象中的变量,取值时一定要用 [变量名]

weixin_49157844的博客 1081

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ES6总结

ECMA(European Computer Manufacturers Association)中文名称为欧洲计算机制造商协会,这个组织的目标是评估、开发和认可电信和计算机标准。1994 年后该组织改名为 Ecma 国际。ECMAScript 是由 Ecma 国际通过 ECMA-262 标准化的脚本程序设计语言.......

Alemon的博客 4997

ES5/6新特性

文章目录一、ES5:1、数组尾逗号:2、严格模式:二、ES6:1、模板字符串2、块级作用域3、箭头函数4、解构赋值5、对象字面量改进6、Spread Operator7、Promise8、函数默认参数9、模块的 Import 和 Export10、内置对象新增API:11、新增Map集合:12、新增Set集合:13、Symbol符号 一、ES5: 1、数组尾逗号: [,,,].length [1, 2, 3,].length //支持ES5的则length为3 //不支持ES5的length为4 { p

吴小迪的博客 4万+

es6(四):Symbol,Set,Map

1.Symbol: Symbol中文意思“象征” Symbol:这是一种新的原始类型的值,表示独一无二的值(可以保证不与其它属性名冲突) Symbol()函数前面不能使用new,因为生成的Symbol(下面指s)是一个原始类型的值,不是对象 1 let s=Symbol() 2 console.log(typeof s)//symbol Symb...

demonHunter1234的博客 169

ES6 set、map、symbol...方法

set new Set([]) size 长度 add() 添加 delete() 删除 clear() 清空 for of 遍历 has() 检测是否含有 特点:不重复 var s = new Set([1, 3, 1, 3, 5, 7, 9]); console.log(s); console.log("size:", s.size); //获取长度 console.log("是否有5", s.has(5)); //是否含有 是返回true 无返回false //---------

y_z_z的博客 198

ES6 新特性有哪些

1. 拥有块级作用域,这意味着在 if 语句、for 循环、while 循环等代码块中声明的 let 变量,只在该代码块内有效。2. 不允许在同一作用域内重复声明同一个变量1. 也具有块级作用域。2. 声明时必须进行初始化赋值,且赋值后不能再重新赋值修改其值。3. 如果 const 声明的是一个对象或数组,虽然不能重新赋值整个对象或数组,但可以修改对象的属性值或数组的元素值。

weixin_64684095的博客 8706

【 javascript】JS语法 ES6、ES7、ES8、ES9、ES10、ES11、ES12新特性

本文集合了 ES6 至 ES11 常用到的特性,包括还在规划的 ES12,只列举大概使用,详细介绍的话内容量将十分巨大.。PS:使用新特性需要使用最新版的 bable 就行转义。

weixin_55846296的博客 1万+

ECMAScript6 (ES6、ES2015)新特性详解_object

模板字面量真正的强大之处来源于模板标签。一个模板标签可以被转换为模板字面量并作为最终值返回。在上面的代码中,myTag就是模板标签。myTag其实是一个函数,这个函数会被调用来处理这个模板字符串。一个标签仅代表一个函数,他接受需要处理的模板字面量。标签分别接收模板字面量中的片段,且必须将它们组合以得出结果。函数的首个参数为包含普通 JavaScript 字符串的数组。余下的参数为每次置换的对应值。标签函数一般使用剩余参数来定义,以便轻松地处理数据。let name = '张三',age = 20,

2401_88972412的博客 1748

学习笔记之ES6

来源: http://es6.ruanyifeng.com/#README

小于零等于二的博客 1850

ES6学习笔记

一、概述 1、什么是ECMA Ecma国际(Ecma International)是一家国际性会员制度的信息和电信标准组织。1994年之前,名为欧洲计算机制造商协会(European Computer Manufacturers Association)。总的来说,ECMA是一个组织,同时也是一个标准。 ECMAScript简称ECMA或ES

weixin_51576225的博客 2230

ES6合集

ES6 let与const ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。 Let let 特性 声明变量只有在let所在的代码块内有效。 let只能声明一次。 不存在变量提升。 不影响作用域。 注意:通常与循坏一起使用 Const const 特性 声明一个只读常量,一旦声明,常量的值就不能改变。 声明必须赋初始值。 标识符一般为大写。 只能声明一次。 不允许修改。 块级作用域。 注意:对象和数

zwdkkk的博客 1910

【前端学习笔记】ES6 新特性

当调用一个生成器函数时,它并不立即执行函数体中的代码,而是返回一个特殊的迭代器对象,称为生成器对象。,它好比 rest 参数的逆运算,将一个数组、伪数组转为用逗号分隔的参数序列,对数组进行解包,扩展运算符也可以将对象解包。在生成器函数体内,可以使用 yield 表达式来暂停函数的执行,并返回一个值给生成器的调用者。可用在调用函数时,传递的实参,将一个数组转换为参数序列(与rest参数的区别,一个用在形参,一个实参)3.函数对象的属性 方法是属于函数对象的,其创建的实例对象无法使用,这就是。

qq_46056318的博客 1533

重学JavaScript高级(八):ES6-ES12新增特性学习

在先前的文章 重学JavaScript高级(三):深入JavaScript运行原理中提到过,只不过是ES5的执行描述。因此WeakSet就是弱引用类型,其指向的对象,有可能会被GC回收。在ES6中,有些执行描述进行了改变,ES6中引入了解构的用法。,那么他们之间有什么区别。

weixin_55041125的博客 1566
上一篇: ES6学习笔记8 对象的扩展
下一篇: ES6学习笔记10 Proxy
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值