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';


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/136803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高能数造电池3D打印智能制造小试线,开启全固态电池数字化新时代

在科技创新的浪潮中&#xff0c;电池制造领域又迎来了一次突破性的进展。近日&#xff0c;高能数造(西安)技术有限公司重磅推出了其最新电池数字制造装备——全固态电池3D打印智能制造小试线 &#xff0c;这一创新性的技术开启了全固态电池的数字化智造新时代&#xff0c;为全固…

Flink 基础 -- 应用开发(项目配置)

1、概述 本节中的指南将向您展示如何通过流行的构建工具(Maven, Gradle)配置项目&#xff0c;添加必要的依赖项(即连接器和格式&#xff0c;测试)&#xff0c;并涵盖一些高级配置主题。 每个Flink应用程序都依赖于一组Flink库。至少&#xff0c;应用程序依赖于Flink api&…

如何在时间循环里最优决策——时间旅行者的最优决策

文章目录 每日一句正能量前言时间旅行和平行宇宙强化学习策略梯度算法代码案例推荐阅读赠书活动 每日一句正能量 做一个决定&#xff0c;并不难&#xff0c;难的是付诸行动&#xff0c;并且坚持到底。 前言 时间循环是一类热门的影视题材&#xff0c;其设定常常如下&#xff1…

Pycharm加载项目时异常,看不到自己的项目文件

最近看到一个朋友问&#xff0c;他把项目导入pycharm为什么项目里的包不在项目里显示&#xff0c;只在projects file里显示&#xff1f;问题截图如下&#xff1a; Project里看不到自己的项目文件 只能在Project Files里看到自己的项目文件 问题解答 我也是偶然发现的这个方案…

jQuery中显示与隐藏

在我们jQuery当中&#xff0c;有多个显示隐藏的方法&#xff0c;本篇介绍一下hide()、show()、toggle() 在我们JS当中&#xff0c;或是CSS当中&#xff0c;我们常用到display:none或block; 在我们jQuery当中&#xff0c;我们该如何实现显示隐藏 在我们jQuery当中&#xff0c;我…

vscode基于cmake结果调试运行

Linux环境使用VSCode调试简单C代码_linux vscode编译c代码_果壳中的robot的博客-CSDN博客 Linux环境下使用VScode调试CMake工程 - 知乎 1 vscode实现cmakemake指令 我们都知道&#xff0c;对于cmake构建的工程&#xff0c;编译需要以下步骤: cd build cmake .. make 那如…

Linux CentOS 8(HTTPS的配置与管理)

Linux CentOS 8&#xff08;HTTPS的配置与管理&#xff09; 目录 一、HTTPS 介绍二、SSL 证书的介绍三、实验配置 一、HTTPS 介绍 HTTPS 在 HTTP 的基础下加入 SSL&#xff0c;SSL 是“Secure Sockets Layer”的缩写&#xff0c;中文为“安全套接层”。因此 HTTPS 是以安全为目…

MATLAB算法实战应用案例精讲-【人工智能】人工智能杂谈

目录 人工智能的发展历程 人工智能涉及的内容 一、数据挖掘 二、机器学习

【Unity ShaderGraph】| 物体靠近时局部溶解,根据坐标控制溶解的位置【文末送书】

前言 【Unity ShaderGraph】| 物体靠近时局部溶解&#xff0c;根据坐标控制溶解的位置一、效果展示二、根据坐标控制溶解的位置&#xff0c;物体靠近局部溶解三、应用实例&#x1f451;评论区抽奖送书 前言 本文将使用ShaderGraph制作一个根据坐标控制溶解的位置&#xff0c;物…

如何用Java实现一个基于机器学习的情感分析系统,用于分析文本中的情感倾向

背景&#xff1a;练习两年半&#xff08;其实是两周半&#xff09;&#xff0c;利用工作闲余时间入门一下机器学习&#xff0c;本文没有完整的可实施的案例&#xff0c;由于知识体系不全面&#xff0c;目前代码只能运行&#xff0c;不能准确的预测 卡点&#xff1a; 1 由于过…

技术分享 | app自动化测试(Android)--触屏操作自动化

导入TouchAction Python 版本 from appium.webdriver.common.touch_action import TouchActionJava 版本 import io.appium.java_client.TouchAction;常用的手势操作 press 按下 TouchAction 提供的常用的手势操作有如下操作&#xff1a; press 按下 release 释放 move_…

CentOS Linux 系统镜像

CentOS Linux具有以下特点&#xff1a; 稳定性&#xff1a;CentOS Linux旨在提供一个稳定、可靠的服务器环境&#xff0c;适合用于关键业务应用和生产环境。高效性&#xff1a;CentOS Linux经过优化和调整&#xff0c;可以充分发挥硬件的性能&#xff0c;提高系统的整体效率。…

Rust和isahc库编写代码示例

Rust和isahc库编写的图像爬虫程序的代码&#xff1a; rust use isahc::{Client, Response}; fn main() { let client Client::new() .with_proxy("") .finish(); let url ""; let response client.get(url) .send() …

无线测温系统在电厂的必要性,保障电力系统稳定运行

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;采集关键电力设备接电的实时温度&#xff0c;克服有线温度监测系统存在的诸如线路多&#xff0c;布线复杂&#xff0c;维护困难等不足&#xff0c;将无线无源传感器与Zigbee无线通信技术相结合&#xff0c;将物联网技…

assimp中如何判断矩阵是否是单位矩阵

对于一个矩阵元素为浮点型的矩阵&#xff0c;你是否还在使每个元素跟1.0f或0.0f进行比较&#xff0c;如果这样&#xff0c;只能说你的结果不一定正确&#xff0c;那我们看看assimp中是如何做的。 template <typename TReal> AI_FORCE_INLINE bool aiMatrix4x4t<TReal…

K8S基础服务(apiserver、controller、scheduler、etcd)时区设置

K8S基础服务&#xff08;apiserver、controller、scheduler、etcd&#xff09;时区设置 一、PodPreset 使用PodPreset可以修改所有容器的时区&#xff08;在pod 创建时,用户可以使用 podpreset 对象将特定信息注入 pod 中,这些信息可以包括 secret、 卷、 卷挂载和环境变量&a…

关于VUE启动内存溢出

安装node v10.14.2 后 启动公司的VUE项目 使用命令npm run dev 命令 报错&#xff1a; <--- Last few GCs --->[20940:00000244699848E0] 215872 ms: Scavenge 1690.2 (1836.4) -> 1679.6 (1836.4) MB, 5.4 / 0.7 ms (average mu 0.266, current mu 0.253) a…

jQuery中淡入与淡出

在我们jQuery中为我们封装了很多好玩的方法&#xff0c;我为大家介绍一下淡入与淡出&#xff01; 我们需要配合事件来玩淡入淡出 淡出语法&#xff1a;fadeOut([speed,[easing],[fn]) (1)参数都可以省略 (2)speed:三种预定速度之一的字符串(“slow”“normal”or “fast”)或…

阿里云 :推出通义大模型编码助手产品【通义灵码】

本心、输入输出、结果 文章目录 阿里云 &#xff1a;推出通义大模型编码助手产品【通义灵码】前言通义灵码简介主要功能主要功能点 支持的语言和 IDEjetbrains IDEA 安装计费相关弘扬爱国精神 阿里云 &#xff1a;推出通义大模型编码助手产品【通义灵码】 编辑&#xff1a;简简…

ARMday2(环境创建+工程配置+创建文件+单步调试)

目录 一、汇编环境的创建 二、为工程配置链接脚本&#xff08;map.lds&#xff09; 三、为工程创建汇编文件 start.s 编程调试 接下来我们需要建立一个 start.s 汇编文件添加到我们的工程中去 四、对汇编代码进行单步调试&#xff08;仿真&#xff09; 五、汇编工程的编译 …