ES6新增的语法

news2024/9/29 21:28:32

ES6实际上是一个泛指,泛指 ES2015 及后续的版本
1,let用于声明变量的关键字
let 声明的变量只在所处于的代码块内有效
if (true) {
let a = 10
}
console.log(a) // a is not defined

2, let 不存在变量提升
console.log(a) // a is not deined
let a = 10

3,let 声明的变量具有暂时性死区特性

var a = 10
if (true) { // 在块级作用域中有 let 关键字声明的变量,这个变量就和这个块级进行绑定
console.log(a)
let a = 20
}
// 报错 Cannot access ‘a’ before initialization

和let 有关的面试题
var arr = [];
for (var i = 0; i < 2; i++) {
arr[i] = function () {
console.log(i)
}
}
arr0 // 2
arr1 // 2
在这里插入图片描述

将以上代码中的var i改为let
var arr = [];
for (let i = 0; i < 2; i++) {
arr[i] = function () {
console.log(i)
}
}
arr0 // 0
arr1 // 1

2, const
声明的是常量,常量就是值(内存地址),是不能改变的量
1, 具有块级作用域
if (true) {
const a = 10
}
console.log(a) // a is not defined

2,声明常量时必须赋值

const a // Missing initializer in const declaration

3, 常量赋值后,值不能修改

const a = 10
a = 20
console.log(a) // Assignment to constant variable.

const arr = [1, 2, 3, 4, 5, 6]
arr[0] = 10
arr[1] = 20
console.log(arr)
arr = [‘x’, ‘y’, ‘z’]
console.log(arr)

在这里插入图片描述

以上代码, 更改 arr[0]的值,并没有更改 arr 常量在内存中的存储地址, 而给 arr 重新赋值(arr = [‘x’, ‘y’, ‘z’])却改变了常量在内存中的存储地址。
3, let、const、var区别

1,使用 var 声明的变量,作用域为该语句所在的函数内,且存在变量提升现象
2,使用 let 声明的变量,作用域为该语句所在的代码块重,不存在变量提升
3,使用 const 声明的常量,在后面出现的代码中不能再被修改

4,解构赋值
ES6 允许从数组中提取值,按照对应位置,对变量赋值。对象也可以实现解构

数组解构
let [a, b, c, d, e] = [1, 2, 3]
console.log(a, b, c, d, e) // 1 2 3 undefined undefined

5, 对象解构
let obj = { name: ‘Jerry’, age: 18 };
let { name, age } = obj;
let { name: uname, age: uage } = obj // uname uage属于别名
console.log(name, age) // Jerry 18

6,箭头函数
箭头函数是用来简化函数定义语法的
// 语法
() => {}

通过我们会把箭头函数赋值给一个变量
const func = () => {}

函数体中只有一句代码的话,并且代码的执行结果就是返回值,我们可以省略大括号
// 传统的函数形式
function func(x, y) {
return x + y
}

// 使用箭头函数的形式
const func = (x, y) => x + y

如果形参只有一个,可以省略小括号
// 传统函数形式
function func (v) {
return v
}

// 箭头函数形式
const func = v => v

箭头函数不绑定 this,箭头函数中没有自己的 this,如果在箭头函数中使用this, this关键字将指向箭头函数定义位置中的 this
function fn() {
console.log(this)
return () => {
// 箭头函数 中的 this 指向的是箭头函数定义区域的 this, 此处箭头函数被定义在 fn 函数的内部,所以箭头函数中的 this 指向的就是 fn这个区域中的this
console.log(this)
}
}
const obj = {
name: ‘Jerry’
}
const func = fn.call(obj)
func()

在这里插入图片描述

箭头函数面试题:
var age = 100
const obj = {
age: 18,
say: () => {
console.log(this.age) // 此处打印出100, obj 不能产生作用域,所以箭头函数被定义在全局作用域下
}
};
obj.say()

7, 剩余参数
剩余参数允许我们将一个不确定数量的参数表示为一个数组
function func(name, …args) {
console.log(name) // 1
console.log(args) // [2, 3, 4, 5, 6]
}
func(1, 2, 3, 4, 5, 6)

实例:
const sum = (…args) => {
let total = 0;
args.forEach(item => total += item)
return total
}
console.log(sum(10, 20, 30, 40)) // 100

剩余参数配合解构使用:
let person = [‘Jerry’, ‘Lise’, ‘Tom’, ‘xiaowang’];
let [p1, …p2] = person
console.log(p1) // Jerry
console.log(p2) // [‘Lise’, ‘Tom’, ‘xiaowang’];

8, 扩展运算符
扩展运算符可以将数组或者对象转为用逗号分隔的参数序列
const arr = [1, 2, 3, 4, 5]
console.log(…arr) // 1 2 3 4 5

扩展运算应用场景:
可以应用于数组合并
const arr1 = [1, 2, 3]
const arr2 = [4, 5, 6]

// 方法1:
const arr3 = […arr1, …arr2]
console.log(arr3) // [1, 2, 3, 4, 5, 6]

// 方法2:
arr1.push(…arr2)
console.log(arr1) // [1, 2, 3, 4, 5, 6]

扩展运算符可以将 类数组 或可遍历对象转为真正的数组
const divs = document.getElementsByTagName(‘div’);
console.log(divs)
在这里插入图片描述

以上就是 伪数组(类数组),我们把他转为真正的数组:
arduino复制代码const arr = […divs]
console.log(arr)
在这里插入图片描述

8, ES6的内置对象扩展

Array的扩展方法

Array的扩展方法1:Array.from()
构造函数方法:Array.from(): 将 类数组 或可遍历的对象转为真正的数组
const obj = {
“0”: 100,
‘1’: 200,
‘2’: 300,
length: 3
};
const arr = Array.from(obj);
console.log(arr) // [100, 200, 300]

Array.from()方法还可以接受第二个参数,作用类似于map方法,用来将每个元素进行处理,将处理后的值放入返回的数组:
const obj = {
“0”: 100,
‘1’: 200,
‘2’: 300,
length: 3
};
const arr = Array.from(obj, item => item * 2);
console.log(arr) // [200, 400, 600]

Array的扩展方法2:find()方法
用于找出第一个符合条件的数组成员,如果没有找到返回 undefined
let arr = [
{
id: 1,
name: ‘Jerry’
},
{
id: 2,
name: ‘Lise’
}
];
let res = arr.find((item, idx) => item.id === 1)
console.log(res) // {id: 1, name: ‘Jerry’}

Array的扩展方法3:findIndex()方法
用于找出第一个符合条件的数组成员的索引,如果没有找到返回 -1
示例1:
let arr = [
{
id: 1,
name: ‘Jerry’
},
{
id: 2,
name: ‘Lise’
}
];
let res = arr.findIndex((item, idx) => item.id === 1)
console.log(res) // 0

// 示例2:
const arr = [10, 20, 30, 40, 50]
const index = arr.findIndex(item => item > 18)
console.log(index) // 1

Array的扩展方法4:includes()方法
表示某个数组是否包含给定的值,返回布尔值
let arr = [‘x’, ‘y’, ‘z’];
console.log(arr.includes(‘x’)) // true
console.log(arr.includes(‘k’)) // false

String的扩展方法

String的扩展方法1:模板字符串(``)
let name = Jerry
console.log(name) // Jerry

模板字符串中可以解析变量
const name = ‘Jerry’
const age = 18
const Hi = 我是 ${name}, 今年 ${age}
console.log(Hi) // 模板字符串中的内容可以换行

模板字符串中可以调用函数
j在这里插入图片描述
const func = function () {
return ‘函数返回内容’
}
const res = ${func()},哈哈哈~
console.log(res) // 函数返回内容,哈哈哈~

String的扩展方法2:startsWith()、endsWith()

startsWith(): 表示参数字符串是否在原字符串中的头部,返回布尔值
endsWith(): 表示参数字符串是否在原字符串中的尾部,返回布尔值

const str = ‘Hello’
console.log(str.startsWith(‘H’)) // true
console.log(str.startsWith(‘e’)) // false
console.log(str.endsWith(‘e’)) // false
console.log(str.endsWith(‘o’)) // true

String的扩展方法3:repeat()
repeat()方法表示将原字符串重复 n 次,返回一个新字符串
const name = ‘Jerry’
console.log(name.repeat(3)) // JerryJerryJerry

9, Set
ES6提供的新的数据结构 Set,它类似于数组,但是成员的值都是唯一的,没有重复的值
Set本身是一个构造函数,用来生成 Set数据结构
const s = new Set()
Set函数可以接受数组作为参数,用来初始化
const s = new Set([1, 2, 3, 4, 5, 6, 6, 6])
console.log(s.size)
console.log(s)
在这里插入图片描述

Set 应用场景: 数组去重
const arr = new Set([‘a’, ‘a’, ‘b’, ‘b’])
console.log([…arr]) // [‘a’, ‘b’]

Set实例的方法:

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

const s = new Set();
s.add(1).add(2).add(3) // {1, 2, 3}
s.delete(2) // {1, 3}
s.has(3) // true
s.clear() // {}

Set的实例与数组一样,也拥有forEach 方法,用于对每个成员执行某种操作,没有返回值
s.forEach(value => console.log(value))

示例:
const s = new Set([‘a’, ‘b’, ‘c’]);
s.forEach(v => console.log(v)) // a b c

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

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

相关文章

元素2D转3D 椭圆形旋转实现

椭圆旋转功能展示 transform-style: preserve-3d;&#xff08;主要css代码&#xff09; gif示例&#xff08;背景图可插入透明以此实现边框线的旋转&#xff09; 导致的无法点击遮挡问题可以参考我的另一个文章 穿透属性-----------------------css穿透属性 实时代码展示

如何与 Boot Barn 建立 EDI 连接?

Boot Barn 专注于提供各种高品质的靴子、鞋类和西部服饰。其经营范围广泛&#xff0c;为广大顾客提供最新潮流和经典款式的选择。 Boot Barn 的使命是成为顾客在西部风格时尚领域的首选购物地点。多年来&#xff0c;Boot Barn 凭借卓越的服务和优质的产品赢得了众多客户的信赖和…

LabVIEW使用DSA技术从X射线图像测量肺气容量

LabVIEW使用DSA技术从X射线图像测量肺气容量 相衬X射线&#xff08;PCX&#xff09;成像技术利用相邻介质之间折射率的微小差异来增强传统X射线成像通常不可见的物体的边界。事实证明&#xff0c;这一进展在一系列生物医学和材料科学中非常有益于材料表征、疾病检测以及解剖形…

Hive 中把一行记录拆分为多行记录

背景 业务场景&#xff1a;统计每个小时视频同时在线观看人数&#xff0c;因后台的业务数据是汇总之后的&#xff0c;只有开始时间、结束时间&#xff0c;没有每小时的详细日志数据&#xff0c;无法直接进行统计&#xff0c;所以需要对每条业务数据进行拆分&#xff0c;来统计…

【redis】能ping通虚拟机但是telnet不通

问题 虚拟机上有redis&#xff0c;能ping通虚拟机的ip&#xff0c;但是telnet已启动的redis6379端口失败 基本情况 虚拟机网络模式是NAT模式&#xff0c;linux防火墙firewalld已关闭&#xff0c;没有iptables&#xff0c;主机和虚拟机能互相Ping通&#xff0c;主机telnet re…

后端进阶之路——Spring Security构建强大的身份验证和授权系统(四)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ 解决算法&#xff0c;一个专栏就够了★ ★ 架…

鸿蒙的初项目

经过这几天的了解&#xff0c;我还是决定挑战一下自己用ets语言去写一个鸿蒙的程序&#xff01; 先创建了一个ets的项目&#xff0c;然后我发现这里面有一个组件叫Flex&#xff0c;跟css里面的弹性布局好像差不多&#xff0c;但是用法略有差异&#xff0c;这个Flex是在&#xf…

Python---Numpy

文章目录 1.Numpy是什么&#xff1f;2.ndarray2.1 什么是ndarray?2.2 ndarray的属性2.3 ndarray的类型 3.Numpy基本操作3.1 生成0或1的数组3.2 从现有数组生成数组拓展&#xff1a;浅拷贝和深拷贝 3.3 生成固定范围的数组3.4 生成随机数组3.4.1 正态分布3.4.2 均匀分布 3.5 形…

网络安全(黑客)工具篇

大家好&#xff0c;我是白菜。这篇文章给大家盘点那些年&#xff0c;我们一起玩过的网络安全工具。 一、反恶意代码软件 1.Malwarebytes 这是一个检测和删除恶意的软件&#xff0c;包括蠕虫&#xff0c;木马&#xff0c;后门&#xff0c;流氓&#xff0c;拨号器&#xff0c;…

3D视觉算法工程师的工资,真是离谱!

小凡&#xff1a;「与其服务一个公司&#xff0c;不如服务一个行业」 一 我的从业经历 大家好&#xff0c;我是小凡&#xff0c;「3D视觉从入门到精通」知识星球的星主。 这里简单介绍下的我的从业经历。 本科主要是做机械出身&#xff0c;研究生入行3D视觉&#xff0c;这里…

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--搭建Vue 前端工程[二]

文章目录 SSM--搭建Vue 前端工程--项目基础界面实现功能02-创建项目基础界面需求分析效果图思路分析 代码实现项目前后端分离情况项目前后端分离情况如图 注意事项和细节 SSM–搭建Vue 前端工程–项目基础界面 实现功能02-创建项目基础界面 需求分析 效果图 思路分析 使用V…

.Net6 Web Core API 配置 Autofac 封装 --- 依赖注入

目录 一、NuGet 包导入 二、Autofac 封装类 三、Autofac 使用 四、案例测试 下列封装 采取程序集注入方法, 单个依赖注入, 也适用, 可<依赖注入>的地方配置 一、NuGet 包导入 Autofac Autofac.Extensions.DependencyInjection Autofac.Extras.DynamicProxy 二、Auto…

【Linux】——信号量、线程池

目录 POSIX信号量 信号量的原理 信号量的概念 信号量函数接口 信号量与互斥锁 二元信号量 二元信号量模拟实现互斥功能 基于环形队列的生产消费模型 空间资源的数据资源 申请和释放资源 两个原则 Linux线程池 线程池的概念 线程池的应用场景 线程池的实现 线程…

【ASP.NET MVC】使用动软(二)(10)

一、添加动软生成工程 按前文添加动态到工程 双击动软 完成新建数据库服务器后 &#xff0c;需要关闭重新打开 选择简单三层&#xff0c;注意保存位置 注意切换数据库&#xff1a; 生成后拷贝五个文件夹到工程目录 注意目录结构&#xff1a; 添加四个项目到原来的工程&…

Python接口自动化之cookie、session应用

以下介绍cookie、session原理及在接口自动化中的应用。 HTTP 协议是一种无状态协议&#xff0c;即每次服务端接收到客户端的请求时&#xff0c;都是一个全新的请求&#xff0c;服务器并不知道客户端的历史请求记录&#xff1b;Session 和 Cookie 的主要目的就是为了弥补 HTTP 的…

数学知识(二)

一、裴蜀定理 对于任意整数a,b&#xff0c;一定存在非零整数x,y&#xff0c;使得 ax by gcd(a,b) #include<iostream> #include<algorithm>using namespace std;int exgcd(int a,int b,int &x,int &y) {if(!b){x 1,y 0;return a;}int d exgcd(b,a %…

adb 调试oppo k11过程记录

学习使用appium工具&#xff0c;自动化测试andriod应用程序。 过程记录 背景交代 手机&#xff1a;oppo k11 系统&#xff1a; macOS 手机开启use调试 具体细节&#xff0c;可百度 安装软件 adbappiumappium-inspector adb安装 下载adb工具包platform-tools, 解压。 直…

SpringBoot3---核心特性---1、快速入门II

星光下的赶路人star的个人主页 要活出自己之后再被人理解 文章目录 1、核心技能1.1 常用注解1.1.1 组件注册1.1.2 条件注解1.1.3 属性绑定 1.2 YAML配置文件1.2.1 基本语法1.2.2 示例1.2.3 细节1.2.4 小技巧&#xff1a;lombok 1.3 日志配置1.3.1 简介1.3.2 日志格式1.3.3 记录…

Qt视频播放器

一、设置好ui界面二、打开文件槽函数1.QDir::homePath()作用介绍2.QFileDialog::getOpenFileName()介绍3.QFileInfo介绍4.player 指针解释5.打开文件槽函数完整代码 三、视频播放器初始化1.QMediaPlayer()函数2.设置时间间隔的作用3. QGraphicsScene介绍4.QGraphicsVideoItem介…

【bug】记录一次使用Swiper插件时loop属性和slidersPerView属性冲突问题

简言 最近在vue3使用swiper时&#xff0c;突然发现loop属性和slides-per-view属性同时存在启用时&#xff0c;loop生效&#xff0c;下一步只能生效一次的bug&#xff0c;上一步却是好的。非常滴奇怪。 解决过程 分析属性是否使用错误。 loop是循环模式&#xff0c;布尔型。 …