ES6笔记


用于加深自己对ES6的理解并且能够让自己更好的吸收和之后回顾,写的不咋好,望理解。


一、ES6 引入新的申明字符串的方式:

1. 内容中可以直接出现换行符

let str = `<ul>
                <li> 1 </li>
                <li> 2 </li>
            </ul>`

2.变量拼接

let str1 = 'hello'
let str2 = `${str1} world`

二、箭头函数

1.申明一个函数

//let fn = function(){  }
let fn = (a+b) => {
	return a + b
}
//调用函数
let result = fn(1,2);
//1.this指针是静态的,始终指向开始时的第一个值
//2.this不能作为构造函数
//3.不能使用arguments变量

//箭头函数适合与this无关的回调,定时器,数组的方法回调
//箭头函数不舍与this有关的回调,事件回调,对象方法

三、扩展运算符

const a = [1,2,3]
//申明一个函数
function fn(){
	console.log(arguments);
}
fn(...a); // fn(1,2,3)

1.扩展运算符的应用

//(1)数组合并
const a = [1,2,3]
const b = [6,7]
//const c = a.concat(b) 
const c  = [...a, ...b]

//(2)数组的克隆
const aa = [1,2,3]
const bb = [...aa]   //如果里面有引用类型的话,也是一个浅拷贝

//(3)将伪数组转为真正的数组
const divs = document.querySelectorAll('div')
const divArr = [...divs]

四、迭代器和生成器

1.生成器实例-1

//1秒后控制台输出111,2秒后后输出222,3秒后输出333
//回调地狱
/*
setTimeout(() => {
	console.log(111);
	setTimeout(() => {
		console.log(222);
		setTimeout(() => {
			console.log(333)
		},300)
	},2000)
),1000)
*/
function one(){
	setTimeout(() => {
		console.log(111);
		iterator.next();
	},1000)
}
function two(){
	setTimeout(() => {
		console.log(222);
		iterator.next();
	},2000)
}
function three(){
	setTimeout(() => {
		console.log(333);
		iterator.next();
	},3000)
}
function * gen(){
	yield one();
	yield two();
	yield three();
}
//调用生成器函数
let iterator = gen();
iterator.next();

2.生成器实例-2

//模拟获取 用户数据 订单数据 商品数据
function getUsers(){
	setTimeout(() => {
		let data = '用户数据';
		//调用next方法,并且将数据传入
		// 111
		iterator.next(data);
	})
}
function getOrders(){
	setTimeout(() => {
		let data = '订单数据';
		// 222
		iterator.next(data);
	})
}
function getGoods(){
	setTimeout(() => {
		let data = '商品数据';
		// 333
		iterator.next(data);
	})
}
//异步的
function * gen(){
	// 111
	let users = yield getUsers();
	console.log(users);
	// 222
	let orders = yield getOrders();
	console.log(orders);
	// 333
	let goods = yield getGoods();
	console.log(goods);
}
//调用生成器函数
let iterator = gen();
iterator.next();
/*
真实场景得不到结果
同步的
getUsers();
getOrders();
getGoods();
*/

五、Promise

1.使用Promise封装

//1. 引入fs模块
const fs = require('fs');
//2. 调用方法读取文件
/*
!!!!!多个异步任务,代码会不断的缩进!!!!!!
fs.readFile('./resouces/xx.md',(err,data) => {
	//如果失败
	if(err) throw err;
	//没有失败
	console.log(data.toString());
})
*/
//3. 使用Promise 封装
//使用Promise。就不会持续往里面缩进
const p = new Promise((resolve,reject) => {
	fs.readfILE("./resouces/xx.md",(err,data) => {
		//如果失败
		if(err) reject(err);
		//如果成功
		resolve(data);
	});
}); 
p.then((value) => {
	return new Promise((resolve,reject) => {
		fs.readFile("./resouces/aa.md",(err,data) => {
			resolve([value,data])
		})
	}).then((value) => {
		console.log(value)
	})

六、集合

1.Set

//set集合会去重
let s = new Set(['大事儿','小事儿','坏事儿','小事儿','好事儿'])//元素个数
console.log(s2.size);
//添加新的元素
s2.add('喜事儿')
//删除元素
s2.delete('坏事儿')
//检测
console.log(s2.has('糟心事'))
//清空
s2.clear();

2.集合实践

let arr = [1,2,2,3];
//1.数组去重
let result1 = [...new Set(arr)];
//2.交集
let arr2 = [3,4,5,6,5];
let result2 =  [...new Set(arr)].filter(item => {
	let s2 = new Set(arr2);
	if(s2.has(item)){
		return true;
	}else {
		return false;
	}
})
let result2 =  [...new Set(arr)].filter(item => new Set(arr2).has(item));
//3.并集
let union = [...new Set([...arr,...arr2])];
//4.差集
let diff = [...new Set(arr)].filter(item => !(new Set(arr2).has(item)))

3.Map

let m = new Map();
//添加元素
m.set('name','abc');
m.set('change',() => {
	console.log("abc");
})
let key = {
	school: 'school
}
m.set(ket,['北京','上海']);
//size
console.log(m.size);
//删除
m.delete('name');
//获取
console.log(m.get('change'));
console.log(m.get(key));
//清空
m.clear();
//遍历
for(let v of m){
	console.log(v);
}

七、类

1.Class介绍

class Phone{
	//构造方法
	constructor(brand,price){
		this.brand = brand;
		this.price = price;
	}
	//方法必须使用该语法,不能使用ES5的对象完整形式
	call(){
		console.log("我可以打电话");
	}
}
let onePlus = new Phone("1+",1999)
console.log(onePlus)

八、数值扩展

//0. Number.EPSILON 是JavaScript 表示的最小精度
//EPSILON  属性的值接近于2.2204460492503130808472633361816E-16
function qeual(a,b){
	if(Math.abs(a-b) < Number.EPSILON){
		return true;
	}else{
		return false;
	}
}
console.log(0.1+0.2 === 0.3)//false
console.log(equal(0.1+0.2,0.3))//true

//1. 二进制和八进制
let b = 0b1010; //二进制
let o = 0o777;	//八进制
let x = 0xff;  //十六进制

//2.Number.isFinite 检测一个数值是否为有限数
console.log(Number.isFinite(100))  	  //true
console.log(Number.isFinite(100/0))	  //false
console.log(Number.isFinite(Infinity)) //Infinity 无穷  fasle

//3.Number.isNaN 检测一个数值是否为一个NaN
console.log(Number.isNaN(123))

//4.Number.parseInt Number.parseFloat字符串转整形
console.log(Number.parseInt('5211314love')) //5211314
console.log(Number.parseFloat('3.1415926哈哈')) //3.1415926

//5.Number.isInteger 判断一个数是否为整数
console.log(Number.isInteger(5)) //true
console.log(Number.isInteger(2.45)) //false

//6.Math.trunc 将数字的小数部门抹掉
console.log(Math.trunc(3.5)); //3

//7.Math.sign 判断一个数到底为正数 负数 还是零
console.log(Math.sign(100)); //1
console.log(Math.sign(0)); //0
console.log(Math.sign(-200)); //-1

九、ES7新特性 includes、**

//includes indexOf
const mingzhu = ['西游记','红楼梦','三国演义','水浒传']
console.log(mingzhu.includes('西游记'));//true
console.log(mingzhu.includes('金瓶梅'));//false

// **  
console.log(2 ** 10); //2的10次方 1024
console.log(Math.pow(2,10)); 

十、ES8新特性 async和await、对象方法扩展

//async 函数
async function fn(){
	//返回的不是一个promise类型的对象,则返回的结果就是成功的promise
	//return 'abc';
	//抛出错误,返回的结果是一个失败的Promise
	//throw new Error('出错了!')
	return new Promise((resolve,reject) => {
		resolve("成功的数据");
		//reject("失败的错误");
	})
}
const result = fn();
result.then(value => {
	console.log(value);
},reason => {
	console.warn(reson)
})

//创建promise对象
const p = new Promise((resolve,reject)=> {
	//resolve("成功的值");
	reject("失败了!")
})
//await 要放在 async 函数中.
async function main(){
	try {
		let result = await p;
		console.log(result);
	} catch (e) {
		console.log(e);
	}
}
//调用函数
main();

//对象方法扩展
//声明对象
const school = {
	name:"aaa"
	cities:['北京','上海','深圳']
	xueke: ['前端','JAVA','大数据','运维']
}
//获取对象所有的键
Object.key(school);
//获取对象所有的值
Object.values(school);
//entries
Object.entries(school);
//创建Map
const m = new Map(Object.entries(school));
m.get('cities'); //['北京','上海','深圳']

十一、ES9新特性

1.对象扩展运算符

function connect({host, port, ...user}){
	console.log(host);
	console.log(port);
	console.log(user);
}
connect({
	host: '127.0.0.1',
	port: 3306,
	username: 'root',
	password: 'root',
	type: 'master'
})

十二、ES10新特性

1.Object.fromEntries

//二维数组转化为一个对象
const result = Object.fromEntries([
	['name','abc'],
	['xueke','java','大数据','前端','云计算']
]);

//Map
const m = new Map();
m.set('name','zzz')
const result = Object.fromEntries(m);

//Object.entries ES8 对象转化为二维数组
const arr = Object.entries({
	name: 'abc'
})

2.trimStart 与 trimEnd

(1)trimStart 负责清除左侧空白
(2)trimEnd 负责清除右侧空白

3.flat 与 flatMap

//flat 平
//将多维数组转化为低维数组
const arr = [1,2,3,4,[5,6]];
arr.flat();
const arr1 = [1,2,3,4,[5,6,[7,8,9]]];
//参数为深度 是一个数字
arr.flat(2)

//flatMap
const arr = [1,2,3,4]
//二维数组
const result = arr.map(item => [item * 10])
//如果要转为一维数组
const result = arr.flatmap(item => [item * 10])

十三、ES11新特性

1.动态import

btnclick(){
	import(./hello.js).then(module => {
		module.hello();
	});
}

2.BigInt类型

//大整形
let n = 521n;
console.log(n,typeof(n));

//函数
let n = 123;
console.log(BigInt(n));
console.log(BigInt(1.2)); //不能用浮点数进行转换成BigInt

3.绝对全局对象globalThis

浏览器的全局对象指的是windows对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值