ES6规范新特性总结
ES6新特性
- var、let和const
- 不存在变量提升
- 暂时性死区
- 不允许重复声明
- 解构赋值
- 用途:
- 交换变量的值
- 从函数返回多个值
- 提取JSON数据
- 遍历map结构
- 输入模块的制定方法
- 字符串的扩展
- codePointAt()
- String.fromCharCode()
- at()
- includes(),startsWith(),endsWith()
- repeat()
- padStart(), padEnd()
- 模版字符串
- String.raw()
- 正则的扩展
- RegExp构造函数
- 数值的扩展
- Number()方法
- Number.isFinite() 和 Number.isNaN()
- Number.parseInt() 和 Number.parseFloat()
- Number.isInterger()
- Number.EPSILON
- 安全整数和Number.isSafeInteger()
- Math对象的扩展
- Math.trunc()
- Math.sign()
- Math.cbrt()
- Math.clz32()
- Math.imul()
- Math.fround()
- Math.hypot()
- 对数方法
- 三角函数方法
- 指数运算符
- 数组的扩展
- Array.from()
- Array.of()
- 数组实例的copyWithin()
- 数组实例的find()和findIndex()
- 数组实例的fill()
- 数组实例的entries()、keys()、和values()
- 数组实例的includes()
- 数组的空位
- 数组推导
- 下面是波煮在阅读阮一峰圣经之后总结的一些关于ES6的知识点,希望可以帮助到大家
var、let和const
不存在变量提升
- var命令会存在变量提升,但是let命令不会变量提升
暂时性死区
- 本质:只要一进去当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量
不允许重复声明
- let不允许在相同作用域内,重复声明同一个变量
解构赋值
- 规则:只要等号右边的值不是对象,就先将其转化为对象,由于
undefined和null无法转为对象,所以对它们进行解构赋值都会报错
函数参数的解构赋值 - 函数的参数也可以解构赋值
function add([x,y]){return x + y
}add([1,2]) //x=1,y=2
用途:
交换变量的值
[x,y] = [y,x] //交换了x和y的值
从函数返回多个值
- 函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回。有了解构赋值,取出这些值就非常方便
const example = ()=>{return [1,2,3]
}var [a,b,c] = example()
//a = 1
//b = 2
//c = 3
提取JSON数据
- 解构赋值对提取JSON对象中的数据尤其有用
- 可以快速提取JSON数据的值
var jsonData = {id:1,status:"OK",data:[123,321]
}let {id,status,data} = jsonData
//id = 1
//status = "OK"
//data = [123,321]
遍历map结构
- 任何部署了iterator接口的对象,都可以用for…of循环遍历。Map结构原生支持iterator接口,配合变量的解构赋值,获取键名和键值就非常方便
var map = new Map()
map.set('first','one')
map.set('second','two')for(let [key,value] of map){console.log(key + "is" value)
}
//first is one
//second is two
- 如果只想获取键名或者键值,可以写成下面这样
//获取键名
for(let [key] of map){}//获取键值
for(let [,value] of map){}
输入模块的制定方法
- 加载模块时,往往需要指定输入哪些方法。解构赋值是的输入语句非常清晰
const {method1, method2} = require('source-methods')
字符串的扩展
codePointAt()
- 能够正确处理4个字节储存的字符,返回一个字符的码点
- 对于2个字节储存的常规字符,它的返回结果与charCodeAt()方法相同
codePointAt()方法返回的是码点的十进制值,如果想要十六进制的值,可以使用toString方法转换一下codePointAt()方法实测实一个字符由2个字节还是4个字节组成的最简单的方法
const is32Bit = (c)=>{return c.codePointAt(0) > 0xFFFF
}is32Bit("𠜂")
is32Bit("a")
String.fromCharCode()
- 可以识别大于
0xFFFF的字符
注意:fromCharCode()方法定义在String对象上,而codePointAt()方法定义在字符串的实例对象上
at()
- ES5对字符串对象提供了charAt方法,返回字符串给定位置的字符。该方法不能识别码点大于
0xFFFF的字符 - ES7为字符串实例提供了at方法,可以识别Unicode编号大于
0xFFFF的字符,返回正确的字符
includes(),startsWith(),endsWith()
- includes():返回布尔值,表示是否找到了参数字符串
- startsWith():返回布尔值,表示参数字符串是否在源字符串的头部
- endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部
var s = "Hello world"
s.startsWith('Hello') //true
s.endsWith('!') //false
s.includes('o') //true
这三个方法都支持第二个参数,表示开始搜索的位置
repeat()
- repeat方法返回一个新字符串,表示将原字符串重复n次
'x'.repeat(3) //"xxx"
- 参数如果是小数,会向下取整,即忽略后面的小数部分
'x'.repeat(2.9)
- 如果参数是负数或者Infinity,会报错
- 参数NaN等同于0
padStart(), padEnd()
- ES7推出来字符串补全长度的功能,如果某个字符串未达指定长度,会在头部或者尾部补全。
padStart用于头部补全,padEnd用于尾部补全
'x'.padStart(5,'ab') //'ababx'
'x'.padStart(4,'ab') //'abax''x'.padEnd(5,'ab') //'xabab'
模版字符串
- 模版字符串是增强版的字符串,用反引号标识。
- 可以都当做普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量
注意:在模版字符串中嵌入变量,需要将变量名写在${}中
String.raw()
- 是一个特殊的模版字符串标签,用于返回模版字符串的原始内容,而不是处理后的字符串。
- 他不会对字符串中的转义字符进行解释,而是直接返回他们的原始文本
let rawStr = String.raw`Hello\nWorld`;
console.log(rawStr);// 输出:Hello\nWorldlet str = `Hello\nWorld`;
console.log(str);// 输出:// Hello// World
正则的扩展
RegExp构造函数
- ES6允许RegExp构造函数接受正则表达式作为参数,这是会返回一个原有正则表达式的拷贝
var regex = new RegExp(/xyz/i)
数值的扩展
- ES6提供了二进制和八进制数值的新写法,分别用前缀0b 和 0o 表示
0b111110111 === 503 //true
0o767 === 503 //ture
- 如果要将使用0b和0x前缀的字符串数值转为十进制的值,要使用
Number()方法
Number('0b111') //7
Number('0o10') //8
Number.isFinite() 和 Number.isNaN()
- ES6在Number对象上新提供了
Number.isFinite()和Number.isNaN()两个方法,用来检查Infinite和NaN这两个特殊值 Number.isFinite():用来检查一个数值是否非无穷
-Number.isNaN():用来检查一个值是否为NaN
注意:这两个新方法只对数值有效,对于非数值一律返回false
Number.parseInt() 和 Number.parseFloat()
- ES6将全局方法
parseInt()和parseFloat()移植到了Number对象上,行为完全保持不变,这样做的目的,是逐步减少全局性方法,使语言逐步模块化 - 用于将字符串安全地转换为数字
Number.isInterger()
- 用来判断一个值是否为整数。
- 注意:在js内部,整数和浮点数是同样的储存方法,所以3和3.0被视为同一个值
Number.isInteger(25) //true
Number.isInteger(25.0) //true
Number.isInteger(25.1) //false
Number.isInteger("15") //false
Number.isInteger(true) //false
Number.EPSILON
- ES6在Number对象上新增了一个极小的常量------
Number.EPSILON - 引入这个值的目的:在于为浮点数计算设置一个误差范围。
安全整数和Number.isSafeInteger()
- ES6引入了
Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER两个常量,用来表示这个范围的上下限 -------2的53次方到2的53次方(不含两个端点) - Number.isSafeInteger():用来判断一个整数是否落在上述范围内
Math对象的扩展
Math.trunc()
Math.trunc方法用于去除一个数的小数部分,返回整数部分
Math.trunc(4.1) //4
Math.trunc(4.9) //4
Math.trunc(-4.1) //-4
Math.trunc(-4.9) //-4
Math.trunc(-0.1234) //-0
- 对于非数值,
Math.trunc()内部使用Number方法将其先转为数值 - 对于空值和无法截取的整数的值,返回NaN
Math.trunc(NaN) //NaN
Math.trunc('foo') //NaN
Math.trunc() //NaN
Math.sign()
Math.sign()方法用于判断一个数到底是正数、负数、还是零- 返回值的五种情况:
- 参数为正数,返回+1
- 参数为负数,返回-1
- 参数为0,返回0
- 参数为-0,返回-0
- 其他值,返回NaN
Math.cbrt()
Math.cbrt()方法用于计算一个数的立方根
Math.clz32()
- 该方法返回一个数的32位无符号整数形式有多少个前导0
Math.imul()
- 该方法返回两个数以32位带符号整数形式相乘的结果,返回的也是一个32位的带符号整数
Math.imul(2,4) //8
Math.imul(-1,8) //-8
Math.imul(-2,-2) //4
Math.fround()
- Math.fround()方法返回一个数的单精度浮点数形式
Math.fround(1) //1
Math.fround(1.337) //1.3370000123977661
Math.hypot()
- 该方法返回所有参数的平方和的平方根
Math.hypot(3,4) //5
Math.hypot(NaN) //NaN
Math.hypot(3,4,'foo') //NaN
- 只要有一个参数无法转为数值,就会返回NaN
对数方法
Math.expm1(x):返回e^x-1,即Math.exp(x) - 1Math.log1p(x):返回log(1+x),如果x小于-1,则返回NaNMath.log10(x):返回以10为底的x的对数,如果x小于0,则返回NaNMath.log2(x):返回以2为底的x的对数。如果x小于0,则返回NaN
三角函数方法
- ES6新增了6个三角函数方法
Math.sinh(x):返回x的双曲正弦
2.Math.conh(x):返回x的双曲余弦Math.tanh(x):返回x的双曲正切Math.asinh(x):返回x的反双曲正弦Math.acosh(x):返回x的反双曲余弦Math.atanh(x):返回x的反双曲正切
指数运算符
- ES7新增了一个指数运算符(**)
2**2 = 4
3**3 = 27//新的赋值运算符
a **= 2
等同于:a = a * a
数组的扩展
Array.from()
- 该方法用于将两类对象转为真正的数组:
- 类似数组的对象:必须有length属性
- 可遍历的对象(包括set和map)
let arrayLike = {'0':'a','1':'b','2':'c',length:3
};//ES5的写法
var arr1 = [].slice.call(arrayLike)//ES6的写法
var arr2 = Array.from(arrayLike)
注意:只要是部署了iterator接口的数据结构,Array.from都能将其转为数组
- 如果参数是一个真正的数组,那么该方法的返回结果是一个一模一样的数组
-Array.from()还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组 - 应用:将字符串转为数组,然后返回字符串的长度,因为它能正确处理各种Unicode字符,可以避免JavaScript将大于\uFFFF的Unicode字符算作2个字符的bug
Array.of()
- Array.of()方法用于将一组值转换为数组
Array.of(3,11,8) //[3,11,8]
Array.of(3) //[3]
Array.of(3).length //1
Array.of()基本上可以用来替代Array()或者new Array(),并且不存在由于参数不同而导致的重载。Array.of()总是返回参数值组成的数组。如果没有参数,就返回一个空数组
数组实例的copyWithin()
- 该方法的作用:在当前数组内部将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。使用这个方法会修改当前数组
[1,2,3,4,5].copyWithin(0,3)
//[4,5,3,4,5]
- 上述代码的解释:上述代码表示将从3号位置直到数组结束的成员(4和5),复制到从0号位置开始的位置,结果覆盖了原来的1和2
数组实例的find()和findIndex()
- 数组实例的
find()方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员一次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员,如果没有符合条件的成员,则返回undefined
[1,4,-5,10].find(n=>n<0)
//-5
- 数组实例的
findIndex()方法与find()方法非常类似,返回的是第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1
数组实例的fill()
fill()方法使用给定值填充数组fill()方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置
数组实例的entries()、keys()、和values()
- 这三个方法都用来遍历数组,返回一个遍历器对象
keys()是对键名的遍历values()是对键值的遍历entries()是对键值对的遍历
for(let index of ['a','b'].keys()){console.log(index)
}
// 0
// 1for(let [index,elem] of ['a','b'].entries()){console.log(index,elem)
}
// 0 'a'
// 1 'b'
数组实例的includes()
- 该方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的
includes方法类似 - 该方法的第二个参数表示搜索的起始位置,默认是0
- 没有该方法时,通常使用数组的
indexOf方法检查是否包含某个值
注意:Map和Set数据结构有一个has方法,需要和includes进行区分
- Map结构的
has方法是用来查找键名的 - Set结构的
has方法是用来查找值的
数组的空位
- 数组的空位指数组的某一个位置没有任何值
- 注意:空位不是
undefined,一个位置的值等于undefined依然是有值的。空位是没有任何值 - ES6明确将空位转为
undefined
数组推导
- 允许直接通过现有数组生成新数组
var a1 = [1,2,3,4]
var a2 = [for (i of a1) i * 2]a2 //[2,4,6,8]
- 上面的代码表示,数组a2通过for…of结构直接在a1的基础上生成
- 注意,数组推导中,for…of结构总是写在最前面,返回的表达式写在最后面
- 数组推导可以替代map和filter方法
相关文章:
ES6规范新特性总结
ES6新特性 var、let和const不存在变量提升暂时性死区不允许重复声明 解构赋值用途:交换变量的值从函数返回多个值提取JSON数据遍历map结构输入模块的制定方法 字符串的扩展codePointAt()String.fromCharCode()at()includes(),startsWith(),endsWith()repeat()padSta…...
PyQt学习记录
PyQt学习记录 要在界面上 创建一个控件,就需要在程序代码中 创建 这个 控件对应类 地一个 实例对象。 在Qt系统中,控件(widget)是 层层嵌套 的,除了最顶层的控件,其他的控件都有父控件。 几个函数 函数mo…...
嵌入式硬件篇---Uart和Zigbee
文章目录 前言一、UART(通用异步收发传输器)1. 基本概念2. 工作原理帧结构起始位数据位校验位停止位 异步通信波特率 3. 特点优点缺点 4. 典型应用 二、ZigBee1. 基本概念2. 技术细节工作频段2.4GHz868MHz 网络拓扑星型网络网状网络簇状网络 协议栈物理层…...
代码随想录算法训练营--打卡day8
一.反转字符串II 1.题目链接 541. 反转字符串 II - 力扣(LeetCode) 2.思路 循环分组定位:使用 for 循环,每2k为一组。i 每次增加 2k ,就相当于定位到下一组字符的起始位置。在每次循环中,确定当前组需要…...
Linux 学习笔记(5)路径知识详解:绝对路径、相对路径与特殊路径符(期末、期中复习必备)
前言 一、相对路径与绝对路径 1、概念阐述 2、实际示例 二、特殊路径符 1.特殊路径符介绍 2.应用场景 三、总结 四、结语 前言 在 Linux 系统的学习过程中,路径的概念至关重要,它是我们在文件系统中定位文件和目录的关键。今天,我们就…...
Trae + LangGPT 生成结构化 Prompt
Trae LangGPT 生成结构化 Prompt 0. 引言1. 安装 Trae2. 克隆 LangGPT3. Trae 和 LangGPT 联动4. 集成到 Dify 中 0. 引言 Github 上 LangGPT 这个项目,主要向我们介绍了写结构化Prompt的一些方法和示例,我们怎么直接使用这个项目,辅助我们…...
【ida】ida笔记
1 ida下载 IDA Pro 7.0 Windows 和 macOS 版本,包含全部 F5 插件 - 资源分享 - iOS 安全论坛 - 专注于研究 iOS 安全 - iOS Hacker 2 IDA基操 1 shiftF12 查看string信息 (通常可以看到重要的信息 ) 2 Alt T 查找带有目标字符串的函数 3 F5 查看C代码 4 Ctrl F…...
动态规划——两个数组的dp问题
目录 1. 最长公共子序列 2. 不相交的线 3. 不同的子序列 4. 通配符匹配 5. 正则表达式匹配 6. 交错字符串 7. 两个字符串的最小ASCII删除和 8. 最长重复子数组 1. 最长公共子序列 题目链接:1143. 最长公共子序列 - 力扣(LeetCode࿰…...
stream流Collectors.toMap(),key值重复问题
文章目录 一、问题二、问题示例三、原因四、解决方法4.1、方案一 一、问题 发现Collectors.toMap的一个坑,若key值重复的时候会抛异常。如: IllegalStateException: Duplicate key 男 二、问题示例 报错示例如下: import lombok.AllArgsC…...
机器学习 Day10 逻辑回归
1.简介 流程就是: 就是我们希望回归后激活函数给出的概率越是1和0. 2.API介绍 sklearn.linear_model.LogisticRegression 是 scikit-learn 库中用于实现逻辑回归算法的类,主要用于二分类或多分类问题。以下是对其重要参数的详细介绍: 2.1.…...
即时通讯软件BeeWorks,企业如何实现细粒度的权限控制?
BeeWorks作为一款专为企业设计的即时通讯平台,高度重视用户隐私安全,采取了多种措施来保障数据的保密性、完整性和可用性。 首先,BeeWorks采用私有化部署模式,企业可以将服务器架设在自己的网络环境中,所有通讯数据&a…...
Seq2Seq - Dataset 类
本节代码定义了一个 CMN 类,它继承自 PyTorch 的 Dataset 类,用于处理英文和中文的平行语料库。这个类的主要作用是将文本数据转换为模型可以处理的格式,并进行必要的填充操作,以确保所有序列的长度一致。 ⭐重写Dataset类是模型训…...
学习OpenCV C++版
OpenCV C 1 数据载入、显示与保存1.1 概念1.2 Mat 类构造与赋值1.3 Mat 类的赋值1.4 Mat 类支持的运算1.5 图像的读取与显示1.6 视频加载与摄像头调用1.7 数据保存 参考:《OpenCV4快速入门》作者冯 振 郭延宁 吕跃勇 1 数据载入、显示与保存 1.1 概念 Mat 类 : Ma…...
echarts图表相关
echarts图表相关 echarts官网折线图实际开发场景一: echarts官网 echarts官网 折线图 实际开发场景一: 只有一条折线,一半实线,一半虚线。 option {tooltip: {trigger: "axis",formatter: (params: any) > {const …...
idea自动部署jar包到服务器Alibaba Cloud Toolkit
安装插件:Alibaba Cloud Toolkit 配置服务器: 服务器配置: 项目启动Shell脚本命令: projectpd-otb.jar echo 根据项目名称查询对应的pid pid$(pgrep -f $project); echo $pid echo 杀掉对应的进程,如果pid不存在,则不执行 if [ …...
奥利司他
https://m.baidu.com/bh/m/detail/ar_9900965142893895938 奥利司他(四氢脂抑素)是一种众所周知的胰腺和胃脂肪酶不可逆抑制剂 生物活性:奥利司他(四氢脂抑素)是一种众所周知的胰腺和胃脂肪酶不可逆抑制剂。奥利司…...
Element Plus 图标使用方式整理
Element Plus 图标使用方式整理 以下是 Element Plus 图标的所有使用方式,包含完整代码示例和总结表格: 1. 按需引入图标组件 适用场景:仅需少量图标时,按需导入减少打包体积 示例代码: <template><div>…...
链路聚合+vrrp
1.链路聚合 作用注意事项将多个物理接口(线路)逻辑上绑定在一起形成一条逻辑链路,起到叠加带宽的作用1.聚合接口必须转发速率一致。2.聚合设备两端必须一致 配置命令 方法一 [Huawei]interface Eth-Trunk 0----先创建聚合接口,…...
Dynamics 365 Business Central Register Customer Payment 客户付款登记
#Dynamics 365 BC ERP# #D365 ERP# #Navision 前言 在实施过程,经常给客户介绍的 给客户付款一般用Payment Journal. 在客户熟悉系统运行后,往往会推荐客户使用Register Customer Payment.用这个function 工作会快很多,但出错的机会也比较大…...
Odoo免费开源ERP:企业销售过程中出现的问题
在企业未上线Odoo免费开源ERP时,企业销售过程中会存在失误。比如,许多销售订单都有如下问题:不当的定价、向客户过多地询问、处理订单延误、错过发货日期等。这些问题源于企业三个未集成的信息系统:销售管理系统、库存系统和财务系…...
手撕unique_ptr 和 shareed_ptr
文章目录 unique_ptrshared_ptr unique_ptr template<class T> class Unique_ptr { private:T* ptrNULL; public://1、删除默认的拷贝构造函数Unique_ptr(Unique_ptr& u) delete;//2、删除默认的复制构造Unique_ptr& operator(Unique_ptr& u) delete; …...
工会考试的重点内容是什么
工会考试的内容通常涵盖以下几个方面: 1、政治理论: 主要考查考生对马克思主义基本原理、中国特色社会主义理论体系、党的基本路线、方针、政策等方面的掌握程度。题型通常包括选择题、判断题和论述题。 2、法律法规: 这部分主要涉及国家…...
网络稳定性--LCA+最大生成树+bfs1/dfs1找最小边
1.最大生成树去除重边,只要最大的边成树 2.LCA查最近公共祖先,然后询问的lca(x,y)ff,分别从x,y向上找最小边 3.bfs1/dfs1就是2.中向上找的具体实现 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typede…...
混合并行技术在医疗AI领域的应用分析(代码版)
混合并行技术(专家并行/张量并行/数据并行)通过多维度的计算资源分配策略,显著提升了医疗AI大模型的训练效率与推理性能。以下结合技术原理与医疗场景实践,从策略分解、技术对比、编排优化及典型案例等维度展开分析: 一、混合并行技术:突破单卡算力限制 1. 并行策略三维分…...
【C++面向对象】封装(上):探寻构造函数的幽微之境
每文一诗 💪🏼 我本将心向明月,奈何明月照沟渠 —— 元/高明《琵琶记》 译文:我本是以真诚的心来对待你,就像明月一样纯洁无瑕;然而,你却像沟渠里的污水一样,对这份心意无动于衷&a…...
每日算法-250409
这是我今天的算法学习记录。 2187. 完成旅途的最少时间 题目描述 思路 二分查找 解题过程 为什么可以使用二分查找? 问题的关键在于寻找一个最小的时间 t,使得在时间 t 内所有公交车完成的总旅途次数 sum 大于等于 totalTrips。 我们可以观察到时间的单…...
如何实现文本回复Ai ChatGPT DeepSeek 式文字渐显效果?前端技术详解(附完整代码)
个人开发的塔罗牌占卜小程序:【问问塔罗牌】 快来瞧瞧吧! 一、核心实现原理 我们通过三步实现这个效果: 逐字渲染:通过 JavaScript 定时添加字符 透明度动画:CSS 实现淡入效果 光标动画:伪元素 CSS 动画…...
CompletableFuture高级模式详解
目录 CompletableFuture高级模式详解 1. CompletableFuture基础概念 1.1 什么是CompletableFuture? 1.2 异步编程基础 1.3 CompletableFuture与Future的对比 2. 创建CompletableFuture 2.1 基本创建方法 2.2 使用异步方法创建 2.3 指定执行器 3. 转换和链式操作 3.…...
【AI开源大模型工具链ModelEngine】【01】应用框架-源码编译运行
ModelEngine提供从数据处理、知识生成,到模型微调和部署,以及RAG(Retrieval Augmented Generation)应用开发的AI训推全流程工具链。 GitCode开源地址:https://gitcode.com/ModelEngineGitee开源地址:https…...
linux下截图工具的选择
方案一 gnome插件Screenshot Tool(截屏) ksnip(图片标注) gnome setting设置图片的默认打开方式为ksnip就可以快捷的将Screenshot Tool截屏的图片打开进行标记了。 但是最近我发现Screenshot Tool的延迟截图功能是有问题的&…...
