ES6–ES11笔记2
一、Promise对象,用来解决异步编程的,配合then()方法或者catch方法使用
const fs = require('fs');
const p = new Promise((resolve, reject)=>{
fs.readFile('C:\\Users\\ASUS\\Desktop\\各类文件夹\\html+css+javastript\\ES6--ES11\\3_资源文件夹\\one.md', (err, data)=>{
if(err) reject(err);
resolve(data);
});
});
p.then((value)=>{
console.log(value.toString());
}, (reason)=>{
console.warn(reason);
});
1.1、Promise对象是解决异步编程的,多用来配合文件的读写以及ajax
const fs = require('fs');
const p = new Promise((resolve, reject)=>{
fs.readFile('C:\\Users\\ASUS\\Desktop\\各类文件夹\\html+css+javastript\\ES6--ES11\\3_资源文件夹\\one.md', (err, data)=>{
if(err) reject(err);
resolve(data);
});
});
p.then((value)=>{
return new Promise((resolve, reject)=>{
fs.readFile('C:\\Users\\ASUS\\Desktop\\各类文件夹\\html+css+javastript\\ES6--ES11\\3_资源文件夹\\two.md', (err, data)=>{
if(err) reject(err);
resolve([value, data]);
})
});
}, (reason)=>{}).then((value)=>{
return new Promise((resolve, reject)=>{
fs.readFile('C:\\Users\\ASUS\\Desktop\\各类文件夹\\html+css+javastript\\ES6--ES11\\3_资源文件夹\\three.txt', (err, data)=>{
if(err) reject(err);
value.push(data);
resolve(value);
})
})
}, (reason)=>{}).then((value)=>{
console.log(value.toString());
});
二、类的引入,构造函数,父类的继承,静态static 1、类的创建 和 静态static 以及调用
class Person{
static secret = "很能吃";
static fly(){
console.log('不会飞');
}
constructor(name, age){
this.name = name;
this.age = age;
console.log('我是在实例化对象时输出的内容');
}
speak(){
console.log(this.name + "会说话");
}
run(dis){
console.log(this.name + "可以跑" + dis + '米');
}
eat(food){
console.log(`${this.name}认为${food}很好吃`);
}
}
const per = new Person('小白', 18);
per.eat('猪头肉');
Person.fly();
console.log(per.secret);
2.1、类的继承 extends, 以及父类方法的重写
class Person{
constructor(name, age){
this.name = name;
this.age = age;
}
sleep(){
console.log('会睡觉');
}
}
class Student extends Person{
constructor(name, age, sex, subject){
super(name, age);
this.sex = sex;
this.subject = subject;
}
teach(){
console.log(`${this.name}是教${this.subject}的`);
}
}
const stu = new Student('药老', 88, '男', '炼药术');
stu.sleep();
stu.teach();
三、模块(module)的引入,以及模块内属性和方法的暴露 1、模块的引入,是使用export关键字来的
export function add(a, b){
return a+b;
}
export let name = 10;
function mul(a, b){
return a*b;
}
let age = 18;
export{mul, age};
export default{
name: "小小怪",
age: 18,
call(){
console.log('会叫大大怪来帮忙');
}
}
2、使用方式,使用import来导入
3、总结
① 什么是暴露?为什么要使用暴露?有哪几种暴露的方式?
首先一个JS文件就是一个模块,在编写代码时,如果都将所有功能放到一起的话会很混乱,
而且会出现一些重复性的代码,这个时候就需要将代码模块化。既然模块化之后了,就要使用
这些模块的属性和方法以及功能,那么就需要使用到暴露(export:出口的意思),export关键字
可以将需要给外部使用的方法和属性进行暴露。
目前来说是有三种暴露的方式的,在ES6之前使用的是 exports和module.exports,
也就是所谓的COMMANDJS规范。
ES6之后的暴露方式便是:
1、分别暴露,分别给想要的属性和方法之前暴露
2、统一暴露,将需要暴露的方法或属性,以对象的形式向外暴露
3、默认暴露,使用export default{}, 在大括号内使用对象的语法向外暴露功能。
四、集合Set和Map的引入 1、集合的引入 1.1、集合的定义方式 new Set();
let set = new Set(['消炎', '秦岭', '药老']);
console.log(set, typeof set);
set.add('元素1');
console.log(set.size);
set.delete('元素1');
set.has('消炎');
console.log(set);
1.2、集合的应用: 多用来和 数组使用, 集合有去重的功能
let set1 = new Set([1, 2, 3, 3, 2, 4, 3]);
console.log(set1);
const arr1 = [23, 34, 23, 34, 22];
console.log([...new Set(arr1)]);
1.3、集合总结
① 集合是什么?
集合是一种数据结构, 有去重功能,实质上还是object
② 集合有什么用?
集合中的元素称为成员。集合的两个最重要特性是:
首先,集合中的成员是无序的;其次,集合中不允许相同成员存在。
当你想要创建一个数据结构用来保存一些独一无二的元素时就可以用到集合。
1.4、Map的引入
let map = new Map();
map.set('name', '小白');
console.log(map.size);
console.log(map.get('name'));
console.log(map.has('name'));
map.clear();
1.5、Map总结
① 什么是Map?
Map是一组键值对的结构,具有极快的查找速度。类似于对象,
特别之处是,Map中的key可以是任意的数据类型,不像对象Object局限于字符串。
② Map有什么特性?
Map中的key可以是任意数据类型
let map1 = new Map();
const arr4 = ['王者', '吃鸡', '光遇'];
const obj2 = {
name: '孙悟空'
};
map1.set(obj2, arr4);
console.log(map1);
③ Map有什么用?
Map的作用就是做映射。对象也可以用来做映射,
但由于对象的键名只能是字符串(或Symbol),因此存在一些限制,
例如不能对对象进行映射。
Map就没有这个限制,可以对任意类型进行映射。
简而言之,在需要对除字符串以外的数据类型进行映射的时候,Map就可以派上用场。
那么什么是映射?
打个比方,老王一家有3个孩子,映射就好比把老王家的3个孩子都拉出来认一遍。
有点类似是对数组元素的for...of遍历了
|