ES6学习笔记——B站小马哥

001-ES6介绍

在这里插入图片描述

ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。
它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

在这里插入图片描述
在这里插入图片描述

目前,大部分浏览器支持ES6。
如果不支持,需要使用Babel,将ES6转换成ES5。

002-let和const

let和var一样用于声明变量,使用let是针对var一些不好的地方。

1.let声明变量,不会出现变量提升。
	
	console.log(a);
	console.log(b);
	
	var a = 0;
	let b = 0;
	
	按照这个顺序写  
		console.log(a); 输出undefined --->本应该输出错误的
		console.log(b); 输出错误

2.let声明变量,是一个块作用域,即局部变量
	
	if(1==1){
		var a = 0;
		let b = 0;
	}	
	console.log(a);  --->仍然能够输出
	console.log(b);  --->无法输出 这个才应该是正常情况

3.let不能重复声明变量,但是var可以(这样不好)
	var a =0;
	var a =2;
	对于var来说这样是可以的,但是不合理。



所以不使用var,而使用let。

const也可用于声明变量,具有和let同上面的性质。
但是const用于声明常量,一旦被声明,无法被修改。
const也可以声明对象,无法直接修改这个对象,但是可以修改对象中的属性。
	
	const person = {
		name : '小马哥'
	}
	person.name = 'alex' 可以这样修改
	
	person = {
		age : 20
	}
	不能这样修改

在默认情况下用const,而只有你在知道变量值需要被修改的情况下使用let

003-模板字符串

在这里插入图片描述

上面的这种写法相当繁琐不方便,ES6引入了模板字符串解决这个问题
	模板字符串:`字符串` (反引号)
	字符串中需要添加变量,直接使用${变量名}就可以

在这里插入图片描述

004-ES6的函数

ES6的函数比ES5的函数新增了一些功能。

1.新增参数默认值

在这里插入图片描述


2.参数也可以是一个表达式,默认的表达式也可以是一个函数

在这里插入图片描述


3.新增剩余参数 rest参数————目的是代替arguments

在这里插入图片描述

上面代码解释:
	有一个book对象
	通过pick函数,输出想要输出的book对象中的哪些属性的值。
		想知道哪些属性的值,就在pick函数的参数上写上该属性。

	function pick(obj){  
		//obj一个对象,对应参数book对象 
		//多值参数arguments 对象 代表 所有的参数
		//在这里arguments 是 book 'title' 'year' 'author'
		//arguments.length = 4
		//arguments[1] = 'title' arguments[2] = 'year' arguments[3] = 'author' 
		//result为一个新对象
	}
	
	result[arguments[i]] = obj[arguments[i]]
	这样写法太麻烦。

	ES6采用剩余参数:
		根python的多值参数是一样的。
		keys只是一个名字,可以随便写。
		剩余参数即keys是一个真实的数组,而arguments是一个伪数组。
		...keys必须是函数的最后一个形参

在这里插入图片描述

	args是一个真实的数组, ['a', 'b', 'c']
	而arguments是一个伪数组。

在这里插入图片描述


4.扩展运算符 ...
剩余运算符也是...
	主要用于函数的形参,将多个实参合并到一个数组中,每个实参为数组中的元素。
扩展运算符
	主要用于数组分割,将数组中的每一个元素分离,作为参数传给函数

比如选出数组中的最大值
const arr = [10,20,50,30,90,100,40];

ES5的写法:
	Math.max.apply(null,arr);
ES6的写法:
	Math.max(...arr);

5.ES6的箭头函数
function(){}  变为 (形参)=>{函数体}

原本写法:
let result = function(a,b){
	return a+b;
}
console.log(result(1,2));

ES6的箭头函数:
let result = (a,b) => {a+b};
如果函数体只有一条返回语句,可以写为:
	   	let result = (a,b) => (a+b);


若只有一个形参:
let result = a => (a+5); 也可以 	let result = a => a+5;
let result = a => (a);  可以直接写为 let result = a => a;

若没有形参:
let result = () => 'hello';


(形参) => (一条返回语句返回值)
	不管有没有形参,都要加小括号
		只有一个形参,不用加小括号
	返回值,可以不加小括号
		返回值是对象,要加小括号
		let getObj = id => ({id:id,name:'小马哥'});
		console.log(getObj(1));


闭包函数如何使用箭头函数改写:
	原本闭包函数的写法:

在这里插入图片描述

	使用箭头函数改写:

在这里插入图片描述


注意事项:
	1.箭头函数中没有this绑定
	
	在ES5中,this指向取决于调用该函数的上下文对象,
		this的指向是会变的,可能会出现问题
		如下方代码,this是document调用的,但是又有PageHandler,所以this不知道指向哪个,报错。

在这里插入图片描述

ES5中使用bind修改指向,可以解决上述问题:
	bind(this) 的this指向PageHandler
	但是这种解决方法不好理解,使用ES6的箭头函数解决。

在这里插入图片描述

如果使用箭头函数,箭头函数中的this是没有绑定的
箭头函数中没有this的指向,箭头函数内部的this值只能通过查找作用域链来确定,即往外找
如果箭头函数被一个非箭头函数所包括,那么this的值与该函数的所属对象相等,否则 则是全局的window对象

箭头函数中的this没有指向,所以this的值不是document,往外找init的function函数的调用对象是PageHandler,所以this指向PageHandler

在这里插入图片描述


2.箭头函数中没有arguments对象

在这里插入图片描述


3.箭头函数不能使用new关键字来实例化对象
	本来function(){} 函数 是一个函数对象
	但是箭头函数不是一个对象,只是一个表达式

在这里插入图片描述

005-解构赋值

解构赋值是对赋值运算符的一种扩展
针对数组和对象 进行赋值
优点:代码书写简洁易读

ES5对象赋值:
	let node = {
		type:'ide',
		name:'foo'
		number:2
	}
	let type = node.type;
	let name = node.name;
	let number = node.number
	这样赋值很麻烦,使用ES6的解构赋值。
	
ES6完全解构赋值:
	let {type,name,number} = {node};
	console.log(type,name,number);

部分解构赋值,有的属性可以不写:
	let {type} = node;  //type是node的属性,{}里必须是属性名,不能写别的。
	console.log(type);

也可以使用rest剩余参数
let {type,...args}  = node;
type 就是 'ide'
args 就是 name:'foo' 和 number:2

也可以赋默认值:
	let {type,name,number=4} = {type:'aaa',name:'mike'}


ES6数组赋值:
	let arr = [1,2,3];
	let [a,b,c] = arr;
	console.log(a,b,c);
	
	也有完全解构赋值和部分解构赋值

006-扩展的对象功能

1.简化对象的定义
ES5定义对象:

在这里插入图片描述

ES6定义对象,可以直接写入变量和函数,作为对象的属性和方法:

在这里插入图片描述


2.简化函数返回一个对象
	function fn(x,y){
		return {x,y};  //ES5写法:return {x:x,y:y}
	}		

3.提供给对象两个方法
	is() 相当于===
	NAN === NAN 是false
	Object.is(NAN,NAN)  是true
	
	assign(目标对象,对象1,对象2,等等) 
		多个对象合并,将对象1到最后的所以对象的属性合并到目标对象中。
	let o =Object.assign({},{a:1},{b:2});
	o = {
		a:1,
		b:2
	}

007-Symbol数据类型

ES6提供了一种新的数据类型 Symbol
	无法new Symbol() 这样写是错的

在这里插入图片描述

如果属性是symbol类型,是无法遍历的。
可以使用反射遍历,真是麻烦。

在这里插入图片描述

008-Set和Map集合

Set集合:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

Map集合:

在这里插入图片描述

在这里插入图片描述

009-数组的扩展方法

1.from()方法将伪数组转换为真正的数组
	比如arguments就是一个伪数组
	转换为真正的数组:Array.from(arguments)
	也可以使用扩展运算符:[...argumnets]

在这里插入图片描述

2.of()方法,将任意类型的一组值转换为数组

在这里插入图片描述
在这里插入图片描述

3.copyWithin()
[1,2,3,8,9,10].copyWithin(0,3)  将下标为3的元素到最后的元素赋值,替换从下标为0开始的元素

在这里插入图片描述

4.find()和findIndex()
	
find(形参为一个函数)方法,找出数组中第一个符合条件的元素

在这里插入图片描述

findIndex(形参为一个函数)方法,找出数组中第一个符合条件的元素的下标

在这里插入图片描述

5.entries() values() keys() 返回一个迭代器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.includes()

在这里插入图片描述

010-迭代器iterator

const item = ['one', 'two', 'three'];

//每一个数组有一个属性是Symbol.iterator,这是一个函数,获得迭代器
const ite = item[Symbol.iterator]();  
console.log(ite.next()); //{value:'one', done:false} 返回一个对象 done为false代表继续遍历
console.log(ite.next()); //{value:'two', done:false} 
console.log(ite.next()); //{value:'three', done:false} 
console.log(ite.next()); //{undefined, done:true} done为true代表遍历结束

011-生成器generator函数

generator函数可以通过yield关键字,将函数挂起(暂停函数执行),为改变执行流提供了可能,异步也是使用这种方案。

generator和yield已经被async和await取代了。

在这里插入图片描述
在这里插入图片描述

generator函数是分段执行的,yield语句是暂停执行,而next()是恢复执行。

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


生成器的应用二:部署ajax操作;使异步代码同步化。
使异步代码同步化:
	想要实现的功能:
		比如加载某个页面时,首先显示:加载loading...页面
		然后加载完成的同时,隐藏loading...页面
		这是就可以使用生成器。

在这里插入图片描述

使用生成器实现功能:
	首先执行loadUI()
	然后next() 执行showData()
	showData()执行的同时又有一个next() 执行hideUI()

在这里插入图片描述
在这里插入图片描述

012-Promise对象

针对于异步编程的三种解决方法:生成器generator函数,Promise和Async/await

在这里插入图片描述
在这里插入图片描述

013-Async/await

在这里插入图片描述

014-class类的基本用法

在这里插入图片描述
在这里插入图片描述


使用class:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
也可以使用extends继承父类

015-模块化

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_52041525/article/details/125290056