ES6之新特性

ES6之新特性

let和const

var let const的异同

  • 共同点

    都可以声明局部变量和全局变量

  • 不同点

    • 变量提升方面
      • var声明的变量有变量提升
      • let声明的变量没有变量提升
      • const声明的变量没有变量提升
    • 变量重复声明方面
      • var声明的变量可以重复声明
      • let声明的变量无法重复声明
      • const声明的变量也无法重复声明(一经声明,无法修改)
    • 作用域方面
      • 在块级作用域中,let声明的变量是局部变量
      • 在块级作用域中,const声明的变量是局部变量
      • var没有影响(在全局作用域就是全局变量,在函数作用域就是局部变量)

cosnt 用来声明一个只读的常量(一经声明,无法修改)

const a =100;
a = 200; //报错
console.log(a);

解构赋值(数组和对象快捷取值一种方式)

解构赋值一般用于解构数组(伪数组/类数组)和对象

讲究等号左边两边,模式匹配

  • 传统的ES5数组取值
var list = ['a', 'b' ,'c'];
var a = list[0];
var b = list[1]; 
var c = 1ist[2];

解构赋值 ES6提供的一种快捷方式(语法糖)

// var list=["a","b","c"]; 
var [a, b, c] = ["a","b","c"];
console.log(a,b,c);

// 只得到a b
var [a, b] = ["a","b","c"];
console.log(a,b);

// 只得到第一个和最后一个
var [a, ,c] = ["a","b","c"];
console.log(a,c);
var arr = [1, [2, [3]], 4];
var [a, b, d] = arr; // b[2,[3]]
var [a ,[b, [c]], d] = arr;
console.log(arr)
数组解构
数组解构之默认值

= ""

image-20200820152024847

... 扩展运算符(Rest)

... 扩展运算符(展开运算符)=>展开数组(伪数组)和对象

解构可以取到具体的值,而展开是一股脑展开

image-20200820152428931

展开运算符的运用
  • 数组的深复制(得刻一个与原数组数值相同的新数组,但开辟的地址不一样)
    • 通过新建数组 for遍历
    • 通过数组的相关方法slice()concat()
    • 通过展开运算符

image-20200820152713768

  • 伪数组转真数组
    • 新建数组for遍历
    • Array.from()
    • 通过展开运算符

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 展开对象=>有限制 展开之后放到新的对象中

    注意:展开后必须放到新对象里

image-20200820153249062

数组解构配合展开运算符

展开运算符在解构赋值中,使用时,必须放在最后方

image-20200820161016061

注意

只能用来解构数组/伪数组/字符串(可遍历的结构)/ 对象

如果解构true,100,underfined 会报错

不能解构数字

不能解构布尔值


对象解构
ES6对象

传统的ES5对象和变量配合

image-20200820161718068

ES6对象简写 (当对象中的属性名和变量名相同可以进行简写,除此之外函数也可以简写)

image-20200820162053658

ES6对象解构

对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;

而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

对应属性名解构

image-20200820163501501

解构时用新的变量赋值

image-20200820163820842

解构时自定义变量名

image-20200820165835630

image-20200820170505120

对象解构的默认值

image-20200820171753725

对象解构配合扩展运算符(Reset)

用于排除b

image-20200820171929805

函数的默认值函数的参数解构

es5的函数默认值

image-20200820172227740

es6函数参数的默认值

image-20200820172247100

函数的参数解构 (传入的参数必须是数组/伪数组/字符串 (可以遍历的数据))
数组解构

image-20200820172657336

image-20200820172614145

image-20200820172648660

变量的默认值

image-20200820172939353

参数的默认值

image-20200820173308996

image-20200820173406848

函数的参数解构之对象解构

传入的数据必须是对象

image-20200820175037409

image-20200820175254646

参数的默认值

image-20200820175425692

变量的默认值

image-20200820175407588

函数的参数解构配合扩展运算符

image-20200820175827764

箭头函数(快捷写函数的一种方法)

箭头函数(函数的简写方法用法和普通函数相似this指向有些区别)

普通函数改箭头函数的步骤
  • 把普通函数改为匿名函数(所有的箭头函数都是匿名函数)
  • 把关键词function去掉,在()后加一个箭头=>

image-20200820180336576

细节
  • 如果函数的形式参数,只有一个,包裹形参的()可以省略

    • 如果没有参数,不能省略

      image-20200820180825315

    • 者要对参数进行函数的参数解构,不能省略

image-20200820180602529

  • 关于return值

    如果函数的执行语句只有一条,且该语句为return语句时,{}和return都可以省略

    image-20200820181039897

箭头函数this指向问题
  • 箭头函数的this指向

  • 没有自己的this指向,它的this依赖于箭头函数所在的作用域(父作用域)中的this(简单来说,箭头函数中遇到this,向父级跳一层)

数组和字符串的方法

数组的方法
find 遍历数组 返回元素
  • 接收一个回调函数,回调函数中返回一个条件,把满足条件的第一个元素返回
  • 如果没有满足条件的元素,则返回underfined

image-20200821111308339

findIndex 返回下标
  • 接收一个回调函数,回调函数中返回一个条件,把满足条件的第一个元素的下标返回
  • 如果没有满足条件的元素,则返回-1

image-20200821111435560

fill 使用给定值,填充一个数组
  • 返回修改后的原数组
  • 影响原数组

image-20200821111707504

注意

  • fill方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。
  • [startIndex,endIndex) 包含起始下标,不包含终止下标
flat() “拉平”多维数组
  • 用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数据没有影响
  • 默认只展开一层

image-20200821112251734

拉开2层

image-20200821112337052

要想拉平n层,则传入n

image-20200821112403635

flatMap() 返回数组并拉平
  • flat和map组合形式
  • 先对数组进行map操作,再将返回的新数组拉平

image-20200821114031055

数组实例的entries(),keys()和 values()

返回的都是一个遍历器对象

keys()是对键名(下标)的遍历

image-20200821114437234

values()是对键值(元素)的遍历

image-20200821114553960

entries()是对键对(包含下标和元素的数组)的遍历

image-20200821114634862

可配合解构

image-20200821114825241

遍历器

遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制

任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)

Iterator的作用有三个:

  • 为各种数据结构,提供一个统一的、简便的访问接口
  • 使得数据结构的成员能够按某种次序排列
  • ES6创造了一种新的遍历命令for…of循环,Iterator 接口主要供for…of消费

image-20200821120144488

arguments对象有可以使用遍历器

Map和Set

set 结构

注意

在set结构中,认为NaNNaN相同的,是同一个

image-20200821144601622

在set结构中,两个对象是不相等的,引用不同的空间

image-20200821144732441

image-20200821141542901

Set结构的特征 :成员都是唯一的

类似数组,但是成员的值都是唯一的

set结构的方法

add() 向set结构中添加一个成员(元素)

size属性 返回set结构中成员的个数

delete() 删除set结构中的成员(元素)

clear() 清空set结构中的成员

has() 判断set结构中,是否含有某个成员

典型运用数组去重
  • 方法一 创建一个set结构,遍历数组将每一个元素添加到set中

image-20200821141854368

  • 方法2 构造函数Set,可以直接接收一个数组,返回对应的set结构

image-20200821142019449

注意:set不能通过下标取值,必须通过遍历器取值

set转数组
  • ... 展开运算符
var arr = [...set];
console.log(arr);
  • Array.from()
var arr = Array.from(set);
console.log(arr);
set的遍历操作

由于Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致。

  • set.keys()
for (var key of set.keys(){
	console.1og(key);   
}
  • set.values()
for (var key of set.values(){
	console.1og(key);   
}
  • set.entries()
for (var key of set.entries()(){
	console.1og(key);   
}

  • forEach()
set.forEach((item,index)=>{ 		  
    console.log(item,index);
})
map结构

传统对象的缺点

传统上,只能用字符串当作键

image-20200821145120385

前面的object是类型,后面是字符串

map结构,类似于对象,也是键值对的集合,键名可以是各种类型

var m = new Map();
console.log(m);
map结构的方法

set()方法 设置键名key对应的键值为value

image-20200821145725594

m.set("name","honor");
m.set(1,100);
m.set(true,true);
m.set(null,null);
console.log(m);

get方法 根据键名key查找对应的键值

image-20200821150107883

var res = m.get(null);
console.log(res);

size属性 返回map结构成员的个数

delete() 根据键名,删除某个键

clear() 清空map结构的所有成员

has() 判断map结构中是否含有某个键

map配合二维数组快速生成map结构

image-20200821150826754

map转数组
  • 展开运算符...

image-20200821151019462

  • Array.from()

image-20200821151030958

map的遍历

Map结构原生提供三个遍历器生成函数和一个遍历方法

image-20200821151352150

  • keys():返回键名的遍历器
  • values():返回键值的遍历器
  • entries():返回所有成员的遍历器
  • forEach():遍历Map的所有成员
    • 是反过来的,键值 键名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值