ES6学习笔记
数据类型:Number, String, Boolean, array , tuple,enum,any,Null, Undefined, Object, void, never
扩展运算符...
数据结构:Array, Set, Map
装饰器是一种函数,写成@ + 函数名
类的装饰:
@testable
class MyTestableClass {
// ...
}
let rand = Math.floor(Math.random() * (max - min + 1) + min)
this.bar2Lbl.string = `sprite进度条:${this.progress2.fillRange.toFixed(2)}`
解构赋值:let [a, b, c] = [1, 2, 3]; //a=1,b=2,c=3
Set结构也可以解构赋值:let [x, y, z] = new Set(['a', 'b', 'c']);
let 和var的区别:
let是块级作用域,同一作用域内,let 不能重复声明
var是函数级作用域,可以重复声明,存在变更提升
x > 0 ? 1 : 2
剩余参数:...rest
模块:
import { func1, func2 } from 'moduleA';
解构赋值:交换2个数值:
let x = 1;
let y = 2;
[x, y] = [y, x];
console.log(x,y) //2, 1
---------Set, Map-------
Set类似于数组,但是成员的值都是唯一的,没有重复的值。
const set = new Set([1, 2, 3, 4, 4]);
Set中两个对象总是不相等的,Set属性有:size,add,delete,has,clear
s.add(1).add(2).add(2);
4个遍历Set的方法:keys(),values(),entries(),forEach()
for (let item of set.entries()) {
console.log(item[0]);
}
Set 结构的键名就是键值,2个是一样的:
let set = new Set([1, 4, 9]);
set.forEach((value, key) => console.log(key + ' : ' + value))
使用...去除重复元素:
let arr = [3, 5, 2, 2, 5, 5];
let unique = [...new Set(arr)];
遍历并改变原Set里的值:
let set = new Set([1, 2, 3]);
set = new Set(Array.from(set, val => val * 2)); // set的值是2, 4, 6
使用 Set 可以很容易地实现并集(Union)、交集(Intersect)和差集(Difference):
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
filter:数组过滤
let arr = [1,3,9,6,2,8,5,7,4]
let newArr = arr.filter(a => a > 5) //6, 8, 7, 9
reduce:对数组中的元素累加或累乘,并返回结果。2个参数:当前累计值,当前元素
let arr = [1,3,5]
let sum = arr.reduce((total, item)=>total + item) //9
// 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}
// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}
// (a 相对于 b 的)差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}
Map:set(key, value),get(key),has(key),delete(key),clear()
let map = new Map()
.set(1, 'a')
.set(2, 'b')
.set(3, 'c');
遍历Map:
for (let key of map.keys()) {
console.log(key);
}
for (let value of map.values()) {
console.log(value);
}
for (let item of map.entries()) {
console.log(item[0], item[1]); //key, value
}
map.forEach(function(value, key, map) {
console.log("Key: %s, Value: %s", key, value);
});
Map 结构转为数组结构,比较快速的方法是使用扩展运算符(...)
const map = new Map([
[1, 'one'],
[2, 'two'],
[3, 'three'],
]);
[...map.keys()] // [1, 2, 3]
[...map.values()] // ['one', 'two', 'three']
[...map.entries()] // [[1,'one'], [2, 'two'], [3, 'three']]
[...map] // [[1,'one'], [2, 'two'], [3, 'three']]
结合数组的map方法、filter方法,可以实现 Map 的遍历和过滤:
const map0 = new Map().set(1, 'a').set(2, 'b').set(3, 'c');
const map1 = new Map(
[...map0].filter(([k, v]) => k < 3)
);
---------string字符串--------
repeat方法返回一个新字符串,表示将原字符串重复n次。s.repeat(3) //sss
字符串补全长度:第一个参数是字符串补全生效的最大长度,第二个参数是用来补全的字符串。
'x'.padStart(5, 'ab') //"ababx"
'x'.padEnd(5, 'ab') //"xabab"
'abc'.padStart(10, '0123456789') //0123456abc
消除空格:trim(),trimStart(),trimEnd()
const s = ' abc '
trim(s) //"abc"
//实例方法:at()
const str = 'hello';
str.at(1) // "e"
str.at(-1) // "o"
---------string字符串 end--------
tt.toFixed(2):保留2位小数,会四舍五入
Number.isFinite(),用来检查一个数值是否为有限的,如果参数类型不是NaN,Number.isNaN一律返回false。
isFinite(25) // true
isFinite("25") // true
Number.isFinite(25) // true
Number.isFinite("25") // false
Number.parseInt('12.8') //12 不会四舍五入
Number.parseFloat('123.68#') // 123.68
Number.isInteger(25.1) // false //isInteger用来判断一个数值是否为整数,如果对数据精度的要求较高,
不建议使用Number.isInteger()判断一个数值是否为整数。
-----------------Math start------------
Math.trunc方法用于去除一个数的小数部分,返回整数部分, 不会四舍五入。
Math.trunc(4.9) // 4
Math.sign方法用来判断一个数到底是正数、负数、还是零。
Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN
Math.max(...[14, 3, 77]) //取最大值
rest 参数只能最后一个参数,否则会报错。function(a, ...b)
-----------------Math end------------
箭头函数:()=>
如果箭头函数直接返回一个对象,必须在对象外面加上括号.
// 普通函数写法
var result = values.sort(function (a, b) {
return a - b;
});
// 箭头函数写法
var result = values.sort((a, b) => a - b);
var sum = (num1, num2) => { return num1 + num2; }
-----------------数组Array start------------
Math.max(...[14, 3, 77]) //77
arr1.push(...arr2) //将arr2添加到arr1的尾部
数组的拷贝:使用...扩展运算符, 改变a2不会改变a1里的值
const a1 = [1, 2];
// 写法一
const a2 = [...a1];
// 写法二
// const [...a2] = a1;
数组合并:[...a1, ...a2, ...a3],a1.concat(a2).concat(a3) 注意:这2个方法都是浅拷贝,改变a1的值也会同步到a2
扩展运算符还可以将字符串转为真正的数组:[...'hello'] // [ "h", "e", "l", "l", "o" ]
Array.from():转为真正的数组
let arr = [1,2,3]
let newArr = Array.from(arr, (n) => n+1) //[2, 3, 4]
Array.of()总是返回参数值组成的数组。如果没有参数,就返回一个空数组。
Array() // []
Array(3) // [, , ,]
Array(3, 11, 8) // [3, 11, 8]
以上3个,只有当参数个数大于 2 个时,Array()才会返回由参数组成的新数组,否则返回数组的长度。
用Array.of()可解决上面的问题。
find(),findIndex(),findLast(),findLastIndex() 方法:
[1, 4, -5, 10, -8].find((n) => n < 0) // -5
findIndex()返回的是位置
参数依次为当前的值、当前的位置和原数组。
[1, 5, 10, 15].find(function(value, index, arr) {
if(value > 5){
console.log(value)
}
}) // 10,15
fill方法使用给定值,填充一个数组,有3个参数:给定值,用于指定填充的起始位置,结束位置。
['a', 'b', 'c'].fill(7, 1, 2) // ['a', 7, 'c']
['a', 'b', 'c'].fill(7) // [7, 7, 7]
entries(),keys() 和 values():
let arr = ['a', 'b']
for (let index of arr.keys()) { }
for (let elem of arr.values()) { }
for (let [index, elem] of arr.entries()) {
console.log(index, elem);
}
includes:某个数组是否包含给定的值:要查找的值,查找的起始位置
[1, 2, 3].includes(2) // true
[1, 2, 3].includes(3, 3); // false
Map 和 Set 数据结构有一个has方法:Map.has(value),Set.has(value)
flat() 拉平数组,默认拉平1层
[1, 2, [3, [4, 5]]].flat(2) // [1, 2, 3, 4, 5]
const arr = [5, 12, 8, 130, 44];
arr.at(2) // 8
arr.at(-2) // 130
-----------------数组Array end------------
对象:Object.keys(),Object.values(),Object.entries()
const obj = { 100: 'a', 2: 'b', 7: 'c' };
Object.values(obj)
// ["b", "c", "a"] values的key会从小到大遍历的
求次方:2 ** 3 = 8
join()方法可以将数组中的所有的元素放入到一个字符串内,并以指定的字符进行分割。
反转字符串:
let str = 'abc'
方法一 [...str].reverse().join('')
方法二 str.split('').reverse().join('') //cba
-----------Set-------------
去除数组的重复成员:
[...new Set(array)]
去除字符串里面的重复字符:
[...new Set('ababbc')].join('') // "abc"
//去除数组中重复值
const myArr = [1,3,2,6,2,6]
const mySet = new Set(myArr)
const finalArr = Array.from(mySet) //[1, 3, 2, 6]
方法二:
let arr = [3, 5, 2, 2, 5, 5];
let unique = [...new Set(arr)]; // [3, 5, 2]
let set = new Set([1, 2, 3, 4, 5]);
set = new Set([...set].filter(x => (x % 2) == 0)); // 返回Set结构:{2, 4}
let set = new Set([1, 2, 3]);
set = new Set([...set].map(x => x * 2)); // 返回Set结构:{2, 4, 6}
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)));
const finalArr = Array.from(intersect) // set {2, 3}
如果想在遍历操作中,同步改变原来的 Set 结构:
// 方法一
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
-----------Set end-------------
slice,split,splice :
slice(start, end) : 返回截取的部分,
"123456".slice(1,3);//返回 23
split:将字符串分割为数组
console.log("1234".split("")) //["1", "2", "3", "4"]
console.log("1234".split(",")) //["1234"] 如果split括号里加了字符就会全部连起来
splice:字符串截取
let arr = ['a','b','c','d']
arr.splice(1,2) // ["b", "c"]
Map 结构的has方法,是用来查找键名的
Set 结构的has方法,是用来查找值的
flat():拉平数组:
[1, 2, [3, [4, 5]]].flat(2) // [1, 2, 3, 4, 5]
如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数:
[1, [2, [3]]].flat(Infinity) // [1, 2, 3]
如果原数组有空位,flat()方法会跳过空位
[1, 2, , 4, 5].flat() [1, 2, 4, 5]
let arr = [1,2,3,4]
let newArr = arr.flatMap((x) => [x * 2])
console.log(newArr) // [2, 4, 6, 8]
允许对数组进行操作时,不改变原数组,而返回一个原数组的拷贝:
toReversed(),toSorted(),toSpliced(),with()
arr.reverse() //数组反转
排序: a - b //从小到大排序 b - a //从大到小排序
let arr = [1,3,9,6,2,8,5,7,4]
arr.sort((a,b) => a - b) //1, 2, 3, 4, 5, 6, 7, 8, 9
冒泡排序:
let arr = [1,6,5,9,8,2,3,7,4,0]
let len = arr.length - 1
for(let i = 0;i < len;i++ ){
for(let j=0;j<len-i;j++)
if(arr[j]>arr[j+1]){
[arr[j], arr[j+1]]=[arr[j+1], arr[j]];
}
}
快速排序:
function qSort (arr) {
if (arr.length <= 1) { return arr }
const mVal = arr.shift() // 这是基准数,比这小的放左边数组, 比这大的放在右边
let [left, right] = [[], []]
arr.forEach(item => item > mVal ? left.push(item) : right.push(item))
return [...qSort(left), mVal, ...qSort(right)]
}
Module 的语法:export,import
import { stat, exists, readFile } from 'fs'; //stat=fs.stat
如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名:
import { lastName as surname } from './profile.js';
------------------编程风格:------------------
let 取代 var
尽量用const [a, b, c] = [1, 2, 3];
const a = 'foobar';
const b = `foo${a}bar`;
const [first, second] = arr;
使用扩展运算符(...)拷贝数组:const itemsCopy = [...items];
使用 Array.from 方法,将类似数组的对象转为数组:const nodes = Array.from(foo);
立即执行函数可以写成箭头函数的形式
[1, 2, 3].map(x => x * x);
使用import取代require():import { func1, func2 } from 'moduleA';
相关文章:
ES6学习笔记
数据类型:Number, String, Boolean, array , tuple,enum,any,Null, Undefined, Object, void, never 扩展运算符... 数据结构:Array, Set, Map 装饰器是一种函数,写成 函数名 类的装饰&…...

U-Mail邮箱系统,政务邮箱国产化改造优质之选
近年来,我国电子政务进入了全面铺开快速发展的阶段,政府机构的信息化管理能力也大幅提升。但是,随着国际形势的新变化,国家主管部门陆续出台相关政策,全面指导并要求政府机构落实国产化信息技术建设。因此,…...
C++ 数组学习资料
C 数组学习资料 目录 什么是数组?声明和初始化数组访问数组元素多维数组数组和指针常见的数组操作数组的限制和注意事项 什么是数组? 在 C 中,数组是一种用于存储相同类型元素的数据结构。它是一个固定大小的连续内存块,每个元…...

LabVIEW在OPC中使用基金会现场总线
LabVIEW在OPC中使用基金会现场总线 本文讨论了如何使用开放的OPC(用于过程控制的OLE)接口访问基金会现场总线网络和设备。 NI-FBUS通信管理器随附了一个OPC数据访问服务器。 (NI-FBUS Configurator自动包含NI-FBUS通信管理器。)…...

京东数据分析:2023年Q3户外鞋服市场分析报告(冲锋衣行业销售数据分析)
从露营、骑行、徒步、桨板、垂钓、飞盘、滑雪到如今的city walk,近两年户外运动已经成为了年轻人新的生活方式。户外运动的爆发也刺激了人们对于鞋服在穿搭、场景化、专业性功能等方向的需求,户外鞋服市场迎来增长。 而全国性的降温则带给目前的户外鞋服…...

使用Pytorch的一些小细节(一)
文章目录 前言数据结构-张量max函数索引函数赋值函数拼接函数 前言 由于不经常动手写代码,所以对于python语言中的常见数据结构的用法也不是很熟悉,对于pytorch中的数据结构就更加不熟悉了。之前的代码基础是基于C语言的,属性都是自己定义&a…...

PDF Expert for mac(专业pdf编辑器)苹果电脑
PDF Expert for Mac 是一款功能强大、界面简洁的PDF阅读、编辑和转换工具,为Mac用户提供了全面而便捷的PDF处理体验。无论是日常工作中的文档阅读、标注,还是专业需求下的编辑、转换,PDF Expert 都能满足您的各种需求。 首先,PDF…...

班级新闻管理系统asp.net+sqlserver
班级新闻管理系统 附加功能 新闻图片,点击次数访问自增,每个人都只能增删改查自己发布的新闻,并可以看到所有人发布的新闻 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net架构和sql serve…...
navicat导入.sql文件出现:[ERR] 1067 - Invalid default value for ‘create_date‘
比较老的系统生成的数据库导入5.7时报错[Err] 1067 - Invalid default value for create_time 错误分析 表中的第一个TIMESTAMP列(如果未声明为NULL或显示DEFAULT或ON UPDATE子句)将自动分配DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP属…...

Labview利用声卡捕获波形
一般的计算机上自带的声卡,均既有A/D功能,又有D/A功能,就是一款具备基本配置的数据采集卡,并且技术成熟,性能稳定。 后台如下:...

ElasticSearch7.x - HTTP 操作 - 索引操作
创建索引 对比关系型数据库,创建索引就等同于创建数据库 在 Postman 中,向 ES 服务器发 PUT 请求 :http://192.168.254.101:9200/shopping 说明 {"acknowledged"【响应结果】: true, # true 操作成功"shards_acknowledged"【分片结果】: true, # 分片操…...

Banana Pi BPI-M6(Raspberry Pi 5 替代品)初始设置及固件烧录
Banana Pi BPI-M6:初始设置和镜像烧录 Banana Pi BPI-M6 的首次测试 在上一篇文章中,我比较了Banana Pi BPI-M6和Raspberry Pi 5的硬件特性。两者都拥有出色的硬件技术,在性能方面应该不会有太大的问题。 今天我想测试一下 Banana Pi。作为…...

Ubuntu18.04.6安装qt5.7.1(超级详细教程)
目录 1、下载对应Linux版本的qt 2、安装完qt,可能也要安装下对应的编译工具 1、下载对应Linux版本的qt (1)准备安装的是qt5.7.1:qt-opensource-linux-x64-5.7.1.run (2)在虚拟机进入存放qt安装包的目录…...

进程线程
从Android3.0开始,系统要求网络访问必须在子线程中进行,否则会抛出异常,这么做是为了避免主线程被阻塞而导致ANR,那么网络访问的操作就必须要放到线程中去执行。 进程 进程是操作系统结构的基础,是程序在一个数据集合…...

【ubuntu 快速熟悉】
ubuntu 快速熟悉 2.ubuntu桌面管理器3.ubuntu常见文件夹说明4.ubuntu任务管理器4.1 gnome桌面的任务管理器4.2 实时监控GPU4.3 top 命令 5.ubuntu必备命令5.1 .deb文件5.2 查找命令5.2.1 find文件搜索5.2.2 which查找可执行文件的路径5.2.3 which的进阶,whereis5.2.…...
全局异常处理器(黑马程序员)
定义全局异常处理器非常简单,就是定义一个类,在类上加上一个注解 RestControllerAdvice,加上这个注解就代表我们定义了一个全局异常处理器。 在全局异常处理器当中,需要定义一个方法来捕获异常,在这个方法上需要加上注…...

虹科示波器 | 汽车免拆检测 | 2017款路虎发现车行驶中发动机抖动且加速无力
一、故障现象 一辆2017款路虎发现车,搭载3.0L发动机,累计行驶里程约为3.8万km。车主反映,车辆在行驶过程中突然出现发动机抖动且加速无力的现象,于是请求拖车救援。 二、故障诊断 拖车到店后首先试车,发动机怠速轻微抖…...

数据结构与算法C语言版学习笔记(6)-树、二叉树、赫夫曼树
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、树的定义1.结点的度、树的度2.结点的逻辑关系3.树的深度4.有序树和无序树5.森林 二、树的存储结构(1)双亲表示法(2&…...

Leetcode刷题详解——电话号码的字母组合
1. 题目链接:17. 电话号码的字母组合 2. 题目描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。…...

dream_ready
🧸欢迎来到dream_ready的博客,📜相信您对这篇博客也感兴趣o (ˉ▽ˉ;) Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法 路的尽头是什么?这是我年少时常伴在嘴…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...