0


前端小白的学习之路(ES6 二)

提示:ES6几个新增常用的数组,字符串,对象API,拓展运算符,Promise,async和await

一、新增API

1.数组API

1)循环forEach

arr.forEach(callback(item,index,arr))

可以循环遍历数组中的每个元素,并对每个元素执行指定的操作。

  1. let students = ["张三","李四","赵五","陈六"]
  2. // 1) 循环
  3. students.forEach(function(item,index,arr){
  4. //item:当前处理的数据
  5. //index:当前处理数据的下标
  6. //arr:当前处理的数组
  7. console.log(item,index,arr)
  8. })

注意:

  1. forEach

方法无法中途退出循环(像

  1. for

  1. while

循环中的

  1. break

语句),也无法使用

  1. return

来返回值

2)过滤filter

arr.filter(callback(item,index,arr))

创建一个新数组,其中包含符合指定条件的所有元素。

  1. filter

方法同样接收一个回调函数作为参数,该回调函数会被传入三个参数:当前元素的值(item)、当前元素的索引(index)和被遍历的数组本身(arr)。回调函数应该返回一个布尔值,用于指示是否保留当前元素。

  1. var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  2. var evenNumbers = numbers.filter(function(number) {
  3. return number % 2 === 0;
  4. });
  5. console.log(evenNumbers); // 输出 [2, 4, 6, 8, 10]

注意的是,filter 方法不会修改原始数组,而是返回一个新的数组,其中包含经过操作后的值。

3)映射(一 一对应)map

arr.map(callback(item,index,arr))

用于对数组中的每个元素执行指定操作并返回新数组的方法。和forEach和filter一样接受一个含有三个参数的回调函数。

  1. var numbers = [1, 2, 3, 4, 5];
  2. var squares = numbers.map(function(number) {
  3. return number * number;
  4. });
  5. console.log(squares); // 输出 [1, 4, 9, 16, 25]

注意的是,

  1. map

方法不会修改原始数组,而是返回一个新的数组,其中包含经过操作后的值。

4)数学运算reduce

var result = array.reduce(function(prev,next, index, array) {
// 返回累加器的新值
}, initialValue);

于数组的归并方法,它将数组中的每个元素按顺序执行指定的操作,然后将结果汇总为单个值。

  1. reduce

方法接收两个参数:一个是回调函数,另一个是初始值(可选)。回调函数接收四个参数:累加器值(prev)、下个元素的值(next)、当前元素的索引(index)和被遍历的数组本身(array)。

  1. let arr = [1,2,3,4];
  2. // 累计
  3. let value = arr.reduce(function(prev,next){
  4. return prev * next;
  5. })
  6. console.log(value);// 24

5)测试every

var isEvery = arr.every(function(item, index, array) {
// 返回测试条件的结果
});

检测数组的每一项数据是否符合条件 ,是,返回true,否,返回false。

  1. // every 检测数组的每一项数据是否符合条件 ,是,返回true。
  2. let data = [1,2,3,4,'abc',6,7,8];
  3. let isNum = data.every(item=>{
  4. if(typeof item === 'number') {
  5. return true;
  6. }
  7. })
  8. console.log(isNum);// true

2.字符串API

  1. let str = "https://www.abc.com/static/images/1.jpg";

1).str.startsWith('str2')

检查字符串是否以某一字段开头

  1. console.log(str.startsWith("https"));// true
  2. console.log(str.startsWith("file"));// false

2).str.endWith('str2')

检查字符串是否以某一字段结尾

  1. console.log(str.endsWith(".jpg"));// true
  2. console.log(str.endsWith(".png"));// false

3). str.includes("str2")

检查字符串是否包含某一字段

  1. console.log(str.includes("static"));// true
  2. console.log(str.includes(".com"));// true
  3. console.log(str.includes(".net"));// false

3.对象API

1).delete

删除对象中的属性

  1. let a = 100;
  2. let b = 200;
  3. let point = { a, b };
  4. // 删除对象 a 属性
  5. delete point.a;
  6. console.log(point);// {b: 200}

2).obj.hasOwnProperty('键名')

判断对象中是否包含该属性

  1. let point = {
  2. a: 5,
  3. b: 'c'
  4. }
  5. // 判断对象是否存在指定属性
  6. console.log(point.hasOwnProperty('b'));// true
  7. console.log(point.hasOwnProperty('xxxx'));// false

3).Set对象

Set 有管理数组 操作数组等相关的功能

  1. let arrColor = ['red', 'red', 'red', 'green', 'blue', 'blue', 'blue', 'yellow', 'pink']
  2. console.log(arrColor)
  3. let setObj = new Set(arrColor);
  4. console.log(setObj);// 使用这个对象管理数据
  5. // Set 集合中的数据是唯一的
  6. //Set 对象的特点包括:
  7. //唯一性:Set 中的值是唯一的,即相同的值在 Set 中只会出现一次。
  8. //无序性:Set 中的值是无序的,即值的插入顺序不会影响集合中的排序。
  9. //迭代顺序:Set 对象中的值按照插入顺序进行迭代
  10. let newArrColor = [...setObj];
  11. console.log(newArrColor);//['red', 'green', 'blue', 'yellow', 'pink']

Set 对象提供了一系列的方法用于操作集合,常见的方法包括:

add(value):向 Set 对象中添加一个新的值,如果值已经存在则不会重复添加。
delete(value):从 Set 对象中删除指定的值。
has(value):判断 Set 对象中是否包含指定的值,返回布尔值。
clear():清空 Set 对象中的所有值。
size 属性:返回 Set 对象中值的数量。

  1. let set = new Set();
  2. set.add(1);
  3. set.add(2);
  4. set.add(3);
  5. set.add(1); // 重复添加相同的值,但不会被重复存储
  6. console.log(set.size); // 输出 3
  7. console.log(set.has(2)); // 输出 true
  8. set.delete(2);
  9. console.log(set.has(2)); // 输出 false
  10. set.clear();
  11. console.log(set.size); // 输出 0

4).Map对象

Map 管理键值对 操作对象相关的功能

  1. let mapObj = new Map()
  2. // 添加数据
  3. mapObj.set("width", "100px");
  4. mapObj.set("color", "red");
  5. // 获取数据
  6. let w = mapObj.get("width");
  7. console.log(w);// 100px
  8. // 删除color属性
  9. mapObj.delete("color");
  10. // 布尔值
  11. let isShow = true;
  12. mapObj.set(isShow, 1000);
  13. let num = mapObj.get(isShow);
  14. console.log(num);//1000
  15. console.log(mapObj);//Map(2) {'width' => '100px', true => 1000}
  16. // 采用map对象管理键值对,方便添加数据,获取数据,删除数据
  17. // 而且这种集合的键可以任意数据类型

二、拓展运算符

... :拓展运算符

  1. let arr = ['red', 'green', 'blue', 'yellow', 'pink'];

1) 展开集合

  1. console.log(...arr);// red green blue yellow pink 展开数据集合的作用

2) 复制

  1. let newArr = [...arr];
  2. console.log(newArr);// ['red', 'green', 'blue', 'yellow', 'pink'] 复制一个集合的作用

3) 处理剩余参数

  1. function foo(a, b, ...rest) {
  2. console.log(a);// 'red'
  3. console.log(b);// 'green'
  4. console.log(rest);// ['blue', 'yellow', 'pink']
  5. }
  6. foo(...arr)

三、Promise

1.概念

Promise是ES6异步编程的一种解决方案

(目前最先进的解决方案是async和await的搭配(ES8),

但是它们是基于promise的),

从语法上讲,Promise是一个对象或者说是构造函数

  1. console.log(typeof Promise);// 'function'

Promise 可以处于三种状态中的一种:

  1. Pending(进行中):初始状态,表示异步操作尚未完成,Promise 实例正在执行中。
  2. Fulfilled(已完成):异步操作成功完成,Promise 返回了一个值。
  3. Rejected(已失败):异步操作失败,Promise 返回一个错误。

2.基本使用

  1. // 读取文档
  2. // let msg = "";
  3. // 以下代码的这种写法 叫做 "回调地狱"现象(就是不断嵌套回调函数的现象)
  4. // $.ajax({
  5. // url: "api/a.json",
  6. // type: "get",
  7. // success(content){
  8. // // console.log(content)
  9. // msg += content.message;
  10. // $.ajax({
  11. // url: "api/b.json",
  12. // type: "get",
  13. // success(result){
  14. // console.log(result);
  15. // msg += " " +result.message;
  16. // $.ajax({
  17. // url: "api/c.json",
  18. // type: "get",
  19. // success(result){
  20. // console.log(result);
  21. // msg += " " +result.message;
  22. // console.log(msg);
  23. // }
  24. // })
  25. // }
  26. // })
  27. // }
  28. // })
  29. // 结合Promise修改成这个样子:
  30. const getData = (api_url) => {
  31. // 返回一个Promise实例对象
  32. return new Promise(function (resolve, reject) {
  33. $.ajax({
  34. url: api_url,
  35. type: "get",
  36. success(content) {
  37. // 符合条件 (接受)
  38. resolve(content);
  39. },
  40. error(err) {
  41. // 不符合条件(拒绝)
  42. reject(err);
  43. }
  44. })
  45. })
  46. }
  47. // 定义字符串
  48. let str = '';
  49. let p1 = getData("api/a.json");
  50. console.log(p1);// Promise实例
  51. p1.then(
  52. function (content) {// 请求成功
  53. console.log("1.0", content);
  54. str += content.message;
  55. // 返回Promise实例
  56. return getData("api/b.json");
  57. },
  58. function (err) {// 请求失败
  59. console.log("请求失败");
  60. }
  61. )
  62. .then(
  63. function (content) {// 请求成功
  64. console.log("2.0", content);
  65. str += " " + content.message;
  66. // 返回Promise实例
  67. return getData("api/c.json")
  68. }
  69. )
  70. .then(
  71. function (content) {
  72. console.log("3.0", content);
  73. str += " " + content.message;
  74. console.log(str);
  75. }
  76. )

3.相关方法

1).then()

对象的主要方法是

  1. then()

,它接收两个参数:一个是处理成功情况的回调函数,另一个是处理失败情况的回调函数。这些回调函数会在异步操作完成后被调用。

  1. let promise = new Promise(function(resolve, reject) {
  2. // 异步操作
  3. if (/* 异步操作成功 */) {
  4. resolve(result); // 成功时调用 resolve
  5. } else {
  6. reject(error); // 失败时调用 reject
  7. }
  8. });
  9. promise.then(function(result) {
  10. // 成功处理逻辑
  11. }).catch(function(error) {
  12. // 失败处理逻辑
  13. });
  14. //例子
  15. let promise = new Promise(function(resolve, reject) {
  16. setTimeout(function() {
  17. let randomNum = Math.random();
  18. if (randomNum < 0.5) {
  19. resolve("Success: " + randomNum); // 成功时调用 resolve
  20. } else {
  21. reject("Error: " + randomNum); // 失败时调用 reject
  22. }
  23. }, 1000); // 模拟异步操作
  24. });
  25. promise.then(function(result) {
  26. console.log("Promise resolved:", result); // 成功时执行的回调函数
  27. }).catch(function(error) {
  28. console.error("Promise rejected:", error); // 失败时执行的回调函数
  29. });

2).finally()

方法在 Promise 执行结束后,无论 Promise 是成功还是失败,都会执行指定的回调函数。它与

  1. then()

  1. catch()

不同的是,

  1. finally()

不接收参数,而是始终执行。通常用于清理工作,例如关闭文件、释放资源等。

  1. .finally(
  2. function () {
  3. console.log("最后执行。。。。")
  4. }
  5. )

3).race()

  1. race()

方法同样接收一个包含多个 Promise 对象的数组作为参数,并返回一个新的 Promise 对象。判断哪个任务执行的效率最高,用时最短,就执行那个任务。

  1. let pro1 = new Promise(function (resolve, reject) {
  2. setTimeout(() => {
  3. resolve("1000")
  4. }, 1000);
  5. })
  6. let pro2 = new Promise(function (resolve, reject) {
  7. setTimeout(() => {
  8. resolve("500")
  9. }, 500);
  10. })
  11. let pro3 = new Promise(function (resolve, reject) {
  12. setTimeout(() => {
  13. resolve("300")
  14. }, 300);
  15. })
  16. // 2)执行效率较高的任务
  17. // 判断哪个任务执行的效率最高,用时最短,就执行那个任务
  18. Promise.race([pro1, pro2, pro3])
  19. .then(
  20. function (data) {
  21. console.log(data);
  22. }
  23. )

4).all()

该方法接收一个包含多个 Promise 对象的数组作为参数,并返回一个新的 Promise 对象。该 Promise 对象在数组中所有 Promise 对象都成功完成时才会被成功解析,否则会被拒绝。

  1. // 定义3个promise
  2. let pro1 = new Promise(function (resolve, reject) {
  3. setTimeout(() => {
  4. resolve("1000")
  5. }, 1000);
  6. })
  7. let pro2 = new Promise(function (resolve, reject) {
  8. setTimeout(() => {
  9. resolve("500")
  10. }, 500);
  11. })
  12. let pro3 = new Promise(function (resolve, reject) {
  13. setTimeout(() => {
  14. resolve("300")
  15. }, 300);
  16. })
  17. // 2) 执行所有任务
  18. // 同时执行三个任务 就使用all方法
  19. Promise.all([pro1, pro2, pro3])
  20. .then(
  21. function (arr) {
  22. console.log(arr);
  23. }
  24. )

四、asyncs与await

调用async修饰的函数,可以直接返回promise对象

  1. async function getData() {
  2. console.log("1.0 首先做什么");
  3. // 等待延迟函数执行,才执行后续的代码
  4. await new Promise(function (resolve, reject) {
  5. setTimeout(() => {
  6. console.log("2.0 在这里住一晚~~")
  7. resolve();
  8. }, 1000)
  9. })
  10. // await 后要写 promise函数的语法才有等待的作用
  11. // await setTimeout(()=>{
  12. // console.log("2.0 最后执行");
  13. // },1000)
  14. console.log("3.0 然后做什么")
  15. }
  16. // app 就是promise对象
  17. const app = getData();
  18. // console.log(app);
  19. // app 就可以调用then方法
  20. app.then(
  21. function () {
  22. console.log("4.0 然后做什么")
  23. }
  24. )
标签: 学习 es6 前端

本文转载自: https://blog.csdn.net/weixin_245249828/article/details/136917520
版权归原作者 吃清心的椰羊 所有, 如有侵权,请联系我们删除。

“前端小白的学习之路(ES6 二)”的评论:

还没有评论