每日三问-前端(第十七期)

文章介绍了JavaScript中的Promise.all和Promise.race的用法,解释了它们如何处理Promise数组。同时,讨论了Vue.js中的组件通信方法。在CSS布局方面,阐述了Flexbox和Grid布局的特点及应用场景,包括各自的居中策略。最后提到了前端开发中的深拷贝和浅拷贝概念,指出它们的区别,并提供了一种实现深拷贝的方法。
摘要由CSDN通过智能技术生成

先来回顾一下上期的问题及答案:

2023年6月6日

1. if(a == '1' && a == '2' && a == '3') 可能为 true吗?
可以,通过自定义对象的属性访问器(getter)可以实现。以下是一种可能的解决方案:
let a = {
  value: 1,
  toString() {
    return this.value++;
  }
};

if (a == '1' && a == '2' && a == '3') {
  console.log('条件成立');
}

在这个示例中,对象 a 的属性访问器 toString() 在每次比较时会自增 value 的值,因此可以使条件成立。

2. 在 CSS 中实现居中有哪些方式?
  • 水平居中:

    • 使用 text-align: center 将文本居中对齐。

    • 使用 margin: 0 auto 将块级元素水平居中。

    • 使用 Flexbox 布局,将容器的 justify-content 设置为 center

    • 使用 Grid 布局,将容器的 justify-itemsalign-items 设置为 center

  • 垂直居中:

    • 使用 line-height 将单行文本垂直居中。

    • 使用 Flexbox 布局,将容器的 align-items 设置为 center

    • 使用 Grid 布局,将容器的 align-items 设置为 center

  • 水平垂直居中:

    • 使用 Flexbox 布局,将容器的 justify-contentalign-items 设置为 center

    • 使用 Grid 布局,将容器的 justify-itemsalign-items 设置为 center

    • 使用绝对定位和 transform,结合 top: 50%left: 50%translate(-50%, -50%) 的方式实现居中。

3. 讲解Promise.allPromise.race 。
  • Promise.all 接收一个 Promise 数组作为参数,返回一个新的 Promise 对象。它会等待所有的 Promise 都被解决(resolved)或有一个 Promise 被拒绝(rejected)。只有当所有 Promise 都解决时,Promise.all 才会返回一个解决值组成的数组;如果任何一个 Promise 被拒绝,它会立即拒绝并返回被拒绝的原因。

  • Promise.race 也接收一个 Promise 数组作为参数,返回一个新的 Promise 对象。它会等待第一个解决或拒绝的 Promise,并将其解决值或拒绝原因作为结果。无论第一个 Promise 是解决还是拒绝,Promise.race 都会返回相应的结果。

以下是使用 Promise.allPromise.race 的示例:

// 使用 Promise.all
const promise1 = new Promise((resolve) =>

 setTimeout(() => resolve('Promise 1'), 2000));
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Promise 2'), 1000));

Promise.all([promise1, promise2]).then((values) => {
  console.log(values); // ['Promise 1', 'Promise 2']
});

// 使用 Promise.race
const promise3 = new Promise((resolve) => setTimeout(() => resolve('Promise 3'), 2000));
const promise4 = new Promise((resolve) => setTimeout(() => resolve('Promise 4'), 1000));

Promise.race([promise3, promise4]).then((value) => {
  console.log(value); // 'Promise 4'
});

在上述示例中,Promise.all 等待所有的 Promise 都解决后返回解决值的数组,而 Promise.race 则返回第一个解决或拒绝的 Promise 的结果。

2023年6月7日

  1. 问题:在 Vue.js 中,什么是组件间通信?请列举并简要解释 Vue.js 中常用的组件通信方式。

  2. 问题:在 CSS 中,介绍一下 Flexbox 布局和 Grid 布局,并比较它们之间的区别和适用场景。

  3. 问题:解释一下前端中的深拷贝(Deep Copy)和浅拷贝(Shallow Copy)的概念以及它们之间的区别。请给出至少一种实现深拷贝的方法。

上面问题的答案会在第二天的公众号推文中公布,大家可以关注公众号:程序员每日三问,第一时间获得推送内容。

学习不打烊,充电加油只为遇到更好的自己,每天早上9点纯手工发布面试题(死磕自己,愉悦大家) 希望大家在这浮夸的程序员圈里保持冷静,每天坚持花20分钟来学习与思考,在千变万化,类库层出不穷的今天,不要等到找工作时才狂刷题,提倡每日学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值