ES6-ES11学习入门,2024年最新教学资料下载

});

//catch 能捕捉某个阶段的错误,并处理

const p = new Promise(function (resolve, reject) {

let data = ‘success’

resolve(data)

// reject(‘读取失败’)

})

p.then((value) => {

// throw ‘4’

// return 5

}).then(value => {

// throw 6

return 4

}).catch(err =>

console.log(err)

)

6)Promise读取多个文件实践练习:(node.js环境在终端运行)

//引入 fs 模块

const fs = require(“fs”);

// //这种写法不断嵌套,层数太多的话代码不简洁,称为回调地狱

// fs.readFile(‘./resources/为学.md’, (err, data1)=>{

// fs.readFile(‘./resources/插秧诗.md’, (err, data2)=>{

// fs.readFile(‘./resources/观书有感.md’, (err, data3)=>{

// let result = data1 + ‘\r\n’ +data2 +‘\r\n’+ data3;

// console.log(result);

// });

// });

// });

//使用 promise 实现

const p = new Promise((resolve, reject) => {

fs.readFile(“./resources/为学.md”, (err, data) => {

resolve(data);

});

});

p.then(value => {

return new Promise((resolve, reject) => {

fs.readFile(“./resources/插秧诗.md”, (err, data) => {

resolve([value, data]);

});

});

}).then(value => {

return new Promise((resolve, reject) => {

fs.readFile(“./resources/观书有感.md”, (err, data) => {

//压入

value.push(data);

resolve(value);

});

})

}).then(value => {

console.log(value.join(‘\r\n’));

});

14、Set集合

概述:

ES6 提供了新的数据结构 Set(集合)。它类似于数组,但成员的值都是唯一的,集合实现了 iterator接口,所以可以使用『扩展运算符』和『for…of…』进行遍历,集合的属性和方法:

  1. size 返回集合的元素个数;

  2. add 增加一个新元素,返回当前集合;

  3. delete 删除元素,返回 boolean 值;

  4. has 检测集合中是否包含某个元素,返回 boolean 值;

  5. clear 清空集合,返回 undefined;

基本使用:

集合

Set集合实践:

Set 实践

15、Map集合

概述:

ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合。但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map 也实现了iterator 接口,所以可以使用『扩展运算符』和『for…of…』进行遍历;

Map 的属性和方法:

  1. size 返回 Map 的元素个数;

  2. set 增加一个新元素,返回当前 Map;

  3. get 返回键名对象的键值;

  4. has 检测 Map 中是否包含某个元素,返回 boolean 值;

  5. clear 清空集合,返回 undefined;

简单使用:

Map

16、class类

概述:

ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。基本上,ES6 的 class 可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的 class 写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已;

知识点:

  1. class 声明类;

  2. constructor 定义构造函数初始化;

  3. extends 继承父类;

  4. super 调用父级构造方法;

  5. static 定义静态方法和属性;

  6. 父类方法可以重写;

1)class初体验:

代码实现:

类声明
2)class静态成员:

代码实现:

静态成员
3)ES5构造函数实现继承

代码实现:

对象继承
4)ES6class类继承(及其方法的重写)

重写后不能再调用父类的方法

代码实现:

类继承-2
5)class的set-get
get 和 set Document

17、数值扩展

Number.EPSILON:

Number.EPSILON 是 JavaScript 表示的最小精度;

EPSILON 属性的值接近于 2.2204460492503130808472633361816E-16;

二进制和八进制:

ES6 提供了二进制和八进制数值的新的写法,分别用前缀 0b 和 0o 表示;

当然八进制也可以只加一个前缀0

Number.isFinite() 与 Number.isNaN() :

Number.isFinite() 用来检查一个数值是否为有限的;

Number.isNaN() 用来检查一个值是否为 NaN;

Number.parseInt() 与 Number.parseFloat():

ES6 将全局方法 parseInt 和 parseFloat,移植到 Number 对象上面,使用不变;

Number.isInteger:

Number.isInteger() 用来判断一个数值是否为整数;

**Math.trunc: **

用于去除一个数的小数部分,返回整数部分;

Math.sign

判断一个数到底为正数 负数 还是零

代码实现和相关说明:

代码实现:

数值扩展

18、对象扩展

概述:

ES6 新增了一些 Object 对象的方法:

  1. Object.is 比较两个值是否严格相等,与『===』行为基本一致(+0 与 NaN);

  2. Object.assign 对象的合并,将源对象的所有可枚举属性,复制到目标对象;

  3. proto、setPrototypeOf、 setPrototypeOf 可以直接设置对象的原型;

代码实现及相关说明:

代码实现:

对象方法扩展

Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。

const person = {

isHuman: false,

printIntroduction: function () {

console.log(My name is ${this.name}. Am I human? ${this.isHuman});

}

};

const me = Object.create(person);

me.name = ‘Matthew’; // “name” is a property set on “me”, but not on “person”

me.isHuman = true; // inherited properties can be overwritten

me.printIntroduction();

// expected output: “My name is Matthew. Am I human? true”

19、模块化

概述:

模块化是指将一个大的程序文件,拆分成许多小的文件,然后将小文件组合起来;

模块化的好处:

模块化的优势有以下几点:

  1. 防止命名冲突;

  2. 代码复用;

  3. 高维护性;

模块化规范产品:

ES6 之前的模块化规范有:

  1. CommonJS => NodeJS、Browserify(前端代码打包);

  2. AMD => requireJS;

  3. CMD => seaJS;

ES6 模块化语法:

模块功能主要由两个命令构成:export 和 import

  • export 命令用于规定模块的对外接口(导出模块);

  • import 命令用于输入其他模块提供的功能(导入模块);

三种暴露方式和对应导入方式简单使用:

m.js(导出模块):

模块化.html(导入和使用模块):

ES6暴露数据语法汇总:

m1.js(逐个导出模块):

//分别暴露

export let school = ‘尚硅谷’;

export function teach() {

console.log(“我们可以教给你开发技能”);

}

m2.js(统一导出模块):

//统一暴露

let school = ‘尚硅谷’;

function findJob(){

console.log(“我们可以帮助你找工作!!”);

}

//

export {school, findJob};

m3.js(默认导出模块):

//默认暴露

export default {

school: ‘ATGUIGU’,

change: function(){

console.log(“我们可以改变你!!”);

}

}

模块化.html(导入和使用模块)(好像有跨域的问题,需要构建服务器打开html文件,否则会报错):

三种导入方式

  1. 通用导入方式

  2. 解构赋值形式

  3. 简便形式 针对默认暴露

ES6 模块化

模块化方式二

app.js

//入口文件

//模块引入

import * as m1 from “./m1.js”;

import * as m2 from “./m2.js”;

import * as m3 from “./m3.js”;

// console.log(m1);

// console.log(m2);

// console.log(m3);

// m1.teach();

// m2.findJob();

// m3.default.change();

//修改背景颜色为粉色

import $ from ‘jquery’;// const $ = require(“jquery”);

$(‘body’).css(‘background’,‘pink’);

ES6 模块化

20、Babel对ES6模块化代码转换

Babel概述:

Babel 是一个 JavaScript 编译器;

Babel 能够将新的ES规范语法转换成ES5的语法;

因为不是所有的浏览器都支持最新的ES规范,不能导入npm导入的模块,所以,一般项目中都需要使用Babel进行转换;

步骤:使用Babel转换JS代码——打包成一个文件——使用时引入即可;

步骤:

第一步:安装工具babel-cli(命令行工具) babel-preset-env(ES转换工具) browserify(打包工具, 项目中使用的是webpack);

第二步:初始化项目

npm init -yes

第三步:安装

npm i babel-cli babel-preset-env browserify -D

第四步:使用babel转换

src/js :(js目录);dist/js:(转化后的js目录)

npx babel src/js -d dist/js --presets=babel-preset-env

第五步:打包

npx browserify dist/js/app.js -o dist/bundle.js

第六步:在使用时引入bundle.js

21、ES6模块化引入NPM包

演示:

第一步:安装jquery:

npm i jquery

第二步:在app.js使用jquery

//入口文件

//修改背景颜色为粉色

import $ from ‘jquery’;// 相当于const $ = require(“jquery”); $(‘body’).css(‘background’,‘pink’);

三、ES7 新特性


0、功能概述

1、Array.prototype.includes

判断数组中是否包含某元素,语法:arr.includes(元素值);

2、指数操作符

幂运算的简化写法,例如:2的10次方:2**10;

1、Array.prototype.includes

概述:

Includes 方法用来检测数组中是否包含某个元素,返回布尔类型值; 判断数组中是否包含某元素,语法:arr.includes(元素值);

// includes indexOf

const mingzhu = [‘西游记’, ‘红楼梦’, ‘三国演义’, ‘水浒传’];

//判断

console.log(mingzhu.includes(‘西游记’));//true

console.log(mingzhu.includes(‘金瓶梅’));//false

console.log(mingzhu.indexOf(‘西游记’)); //0

console.log(mingzhu.indexOf(‘金瓶梅’));//-1

2、指数操作符

概述:

在 ES7 中引入指数运算符「」,用来实现幂运算,功能与 Math.pow 结果相同; 幂运算的简化写法,例如:2的10次方:210;

代码实现:

// **

console.log(2 ** 10);// 1024

console.log(Math.pow(2, 10));//1024

四、ES8 新特性


0、功能概述

1、async 和 await

简化异步函数的写法;

2、对象方法扩展

对象方法扩展;

1、async 和 await

概述:

async 和 await 两种语法结合可以让异步代码看起来像同步代码一样; 简化异步函数的写法;

1)async 函数:

1.async 函数的返回值为 promise 对象;

2.promise 对象的结果由 async 函数执行的返回值决定;

//async 函数

async function fn() {

// 返回一个字符串

//return ‘尚硅谷’;

// 返回的结果不是一个 Promise 类型的对象, 返回的结果就是成功 Promise 对象

// return;

//抛出错误, 返回的结果是一个失败的 Promise

// throw new Error(‘出错啦!’);

//返回的结果如果是一个 Promise 对象

return new Promise((resolve, reject)=>{

resolve(‘成功的数据’);

// reject(“失败的错误”);

});

}

const result = fn();

console.log(result);

//调用 then 方法

// result.then(value => {

// console.log(value);

// }, reason => {

// console.warn(reason);

// })

2)await 表达式:

1.await 必须写在 async 函数中;

2.await 右侧的表达式一般为 promise 对象;

3.await 返回的是 promise 成功的值;

4.await 的 promise 失败了, 就会抛出异常, 需要通过 try…catch 捕获处理;

//创建 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();

3)async 和 await 读取文件案例:

代码实现:

//1. 引入 fs 模块

const fs = require(“fs”);

//读取『为学』

function readWeiXue() {

return new Promise((resolve, reject) => {

fs.readFile(“./resources/为学.md”, (err, data) => {

//如果失败

if (err) reject(err);

//如果成功

resolve(data);

})

})

}

function readChaYangShi() {

return new Promise((resolve, reject) => {

fs.readFile(“./resources/插秧诗.md”, (err, data) => {

//如果失败

if (err) reject(err);

//如果成功

resolve(data);

})

})

}

function readGuanShu() {

return new Promise((resolve, reject) => {

fs.readFile(“./resources/观书有感.md”, (err, data) => {

//如果失败

if (err) reject(err);

//如果成功

resolve(data);

})

})

}

//声明一个 async 函数

async function main() {

try {

//获取为学内容

let weixue = await readWeiXue();

//获取插秧诗内容

let chayang = await readChaYangShi();

// 获取观书有感

let guanshu = await readGuanShu();

console.log(weixue.toString());

console.log(chayang.toString());

console.log(guanshu.toString());

} catch (e) {

console.log(e.message);

}

}

main();

运行结果:

image-20220226213633008

没有nodejs 可以用下列代码测试

Document
4)async 和 await 结合发送ajax请求:

代码实现:

发送 AJAX 请求

2、对象方法扩展

1.Object.values()方法:返回一个给定对象的所有可枚举属性值的数组;

2.Object.entries()方法:返回一个给定对象自身可遍历属性 [key,value] 的数组;

3.Object.getOwnPropertyDescriptors()该方法:返回指定对象所有自身属性的描述对象

ES8 对象方法扩展

image-20220226220750786

五、ES9 新特性


0、功能概述

1、Rest 参数与 spread 扩展运算符

在对象中使Rest参数与spread扩展运算符;

2、正则扩展

简化和增强正则匹配;

1、Rest 参数与 spread 扩展运算符

概述:

Rest 参数与 spread 扩展运算符在 ES6 中已经引入,不过 ES6 中只针对于数组,在 ES9 中为对象提供了像数组一样的 rest 参数和扩展运算符;

代码实现:

对象展开

运行结果:

image-20220226221713911

2、正则扩展:命名捕获分组

概述:

ES9 允许命名捕获组使用符号『?』,这样获取捕获结果可读性更强;

之前方法

//声明一个字符串

let str = ‘尚硅谷’;

// //提取 url 与 『标签文本』

const reg = /(.*)</a>/;

// //执行

const result = reg.exec(str);

console.log(result);

console.log(result[1]);

console.log(result[2]);

image-20220226223428853

命名捕获分组

正则扩展-命名捕获分组

image-20220226223545771

3、正则扩展:反向断言

概述:

ES9 支持反向断言,通过对匹配结果前面的内容进行判断,对匹配进行筛选;

代码实现:

正则扩展-反向断言

运行结果:

image-20220226224208031

4、正则扩展:dotAll 模式

概述:

正则表达式中点.匹配除回车外的任何单字符,标记『s』改变这种行为,允许行终止符出现;

代码实现:

exec迭代使用时,需要把正则设置为全局,否则一直匹配第一个

正则扩展-dotAll模式

运行结果:

image-20220226225354408

六、ES10 新特性


0、功能概述

1、Object.fromEntries

将二维数组或者map转换成对象;

2、trimStart 和 trimEnd

去除字符串前后的空白字符;

3、Array.prototype.flat 与 flatMap

将多维数组降维;

4、Symbol.prototype.description

获取Symbol的字符串描述;

1、Object.fromEntries

概述:

将二维数组或者map转换成对象;

之前学的Object.entries是将对象转换成二维数组;

代码实现:

Object.fromEntries

运行结果:

image-20220226230218490

2、trimStart 和 trimEnd

概述:

去掉字符串前后的空白字符;

代码实现:

trimStart 与 trimEnd

运行结果:

image-20220226230419687

3、Array.prototype.flat 与 flatMap

概述:

将多维数组转换成低维数组;

代码实现:

flat 与 flatMap

运行结果:

image-20220226231205246

4、Symbol.prototype.description

概述:

获取Symbol的描述字符串;

代码实现:

//创建 Symbol

let s = Symbol(‘尚硅谷’);

console.log(s.description);

运行结果:image-20220226231326059

七、ES11 新特性


0、功能概述

1、String.prototype.matchAll

用来得到正则批量匹配的结果;

2、类的私有属性

私有属性外部不可直接访问;

3、Promise.allSettled

获取多个promise执行的结果集;

4、可选链操作符

简化对象存在的判断逻辑;

5、动态 import 导入

动态导入模块,什么时候使用什么时候导入;

6、BigInt

大整型;

7、globalThis 对象

始终指向全局对象window;

1、String.prototype.matchAll

概述:

用来得到正则批量匹配的结果;

代码实现:

String.prototype.matchAll

2、类的私有属性

概述:

私有属性外部不可直接访问;

代码实现:

私有属性

运行结果:

image-20220226233018079

3、Promise.allSettled

概述:

获取多个promise执行的结果集;

状态一定为成功fulfilled, 返回值为一个数组

数组每个元素都是一个对象,都有status属性

​ status 为"fulfilled" 另外一个属性value为成功的值

​ status 为"rejected"另外一个属性reason为失败的值

image-20220226234111619

代码实现:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

最后

资料过多,篇幅有限

自古成功在尝试。不尝试永远都不会成功。勇敢的尝试是成功的一半。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

n

概述:

获取Symbol的描述字符串;

代码实现:

//创建 Symbol

let s = Symbol(‘尚硅谷’);

console.log(s.description);

运行结果:image-20220226231326059

七、ES11 新特性


0、功能概述

1、String.prototype.matchAll

用来得到正则批量匹配的结果;

2、类的私有属性

私有属性外部不可直接访问;

3、Promise.allSettled

获取多个promise执行的结果集;

4、可选链操作符

简化对象存在的判断逻辑;

5、动态 import 导入

动态导入模块,什么时候使用什么时候导入;

6、BigInt

大整型;

7、globalThis 对象

始终指向全局对象window;

1、String.prototype.matchAll

概述:

用来得到正则批量匹配的结果;

代码实现:

String.prototype.matchAll

2、类的私有属性

概述:

私有属性外部不可直接访问;

代码实现:

私有属性

运行结果:

image-20220226233018079

3、Promise.allSettled

概述:

获取多个promise执行的结果集;

状态一定为成功fulfilled, 返回值为一个数组

数组每个元素都是一个对象,都有status属性

​ status 为"fulfilled" 另外一个属性value为成功的值

​ status 为"rejected"另外一个属性reason为失败的值

image-20220226234111619

代码实现:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-HnwIez6R-1712655575619)]
[外链图片转存中…(img-Hyj6FCPm-1712655575620)]
[外链图片转存中…(img-flTdf05n-1712655575620)]
[外链图片转存中…(img-EcA9ZbaC-1712655575620)]
[外链图片转存中…(img-MngsCyS8-1712655575620)]
[外链图片转存中…(img-2qQvFDOy-1712655575621)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-STYKoQW4-1712655575621)]

最后

[外链图片转存中…(img-6XQXWxmZ-1712655575621)]

[外链图片转存中…(img-HnUPpDPD-1712655575621)]

资料过多,篇幅有限

自古成功在尝试。不尝试永远都不会成功。勇敢的尝试是成功的一半。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-qTXcnliA-1712655575622)]

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值