你的前端技术是否能通过这些高频面试题?(一)

简介: 你的前端技术是否能通过这些高频面试题?

1.储存了某个数据到 localStorage,立即进行 localStorage.getItem,能否取到值?

如果您已经成功将数据存储到 localStorage 中,调用 localStorage.getItem 方法可以立即取出对应的值。举个例子,如果您使用以下代码将一个键值对存储到 localStorage 中:

localStorage.setItem('key', 'value');

那么您可以立即使用以下代码从 localStorage 中获取该键对应的值:

const value = localStorage.getItem('key');
console.log(value);  // 输出 "value"

当然,在某些情况下(例如浏览器隐私模式下或者被禁用了 localStorage 功能等),调用 localStorage.getItem 方法可能无法取到值,请确保您的代码在适当的环境下运行。

2.实现异步的方式有几种

在 JavaScript 中,实现异步的方式有以下几种:

1. 回调函数:在函数内部执行异步操作,然后将异步操作的结果作为参数传递到回调函数中。

function doAsyncTask(data, callback) {
  setTimeout(function() {
    const result = data.toUpperCase();
    callback(result);
  }, 1000);
}
doAsyncTask('hello', function(result) {
  console.log(result); // 'HELLO'
});

回调函数的方式非常常见,但也很容易导致回调地狱和可读性问题。

2. Promise:Promise 为一种更加优雅的异步模式,可以更好地解决回调地狱和可读性问题。

function doAsyncTask(data) {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      if (data) {
        const result = data.toUpperCase();
        resolve(result);
      } else {
        reject(new Error('Data is null'));
      }
    }, 1000);
  });
}
doAsyncTask('hello')
  .then(function(result) {
    console.log(result); // 'HELLO'
  })
  .catch(function(error) {
    console.error(error);
  });

3. Async/Await:Async/Await 是 ES2017 的新增语法,它是基于 Promise 的封装,可以更加方便地编写异步代码,解决了 Promise 的then方法链式调用的可读性问题。

async function main() {
  try {
    const result = await doAsyncTask('hello');
    console.log(result); // 'HELLO'
  } catch (error) {
    console.error(error);
  }
}
main();

上述三种方式都可以实现异步,具有不同的特点。回调函数是传统方式, Promise 可以更好的处理 Promise 的嵌套和 then 方法的链式调用问题,Async/Await 则提供了更加优雅的方式,在可读性和维护性方面更加友好。

3.异步不阻塞

异步不阻塞是指当一个异步操作被触发时,它会在后台执行(非主线程中执行),在等待操作完成的同时,主线程可以继续执行其他代码,不会被该异步操作所阻塞。

在 JavaScript 中,异步操作通常使用回调函数、Promise 对象或 async/await 语法来实现。例如,以下代码使用 Promise 对象实现了一个异步操作:

function asyncOperation() {
  return new Promise((resolve, reject) => {
    // 模拟一个异步操作
    setTimeout(() => {
      resolve('异步操作完成');
    }, 1000);
  });
}
console.log('异步操作执行前');
asyncOperation().then((result) => {
  console.log(result);
});
console.log('异步操作执行后');

在上面的示例中,当程序执行到 console.log('异步操作执行前') 时会首先输出该语句,然后立即执行下一行代码 asyncOperation(),该函数返回一个 Promise 对象,这个 Promise 对象被 resolve 后继续执行后面的 then 方法中的回调函数,并输出 '异步操作完成',最后输出 '异步操作执行后'

因此,异步操作的执行不会阻塞主线程的代码,而是后台执行,等待异步操作完成后再去执行相应的回调函数或 Promise 对象的 then 方法中的回调函数。

4.选择 div 的第二个子元素

您可以使用以下 CSS 选择器来选择 div 的第二个子元素:

div:nth-child(2)

在这个选择器中,div 表示选择所有的 div 元素,nth-child(2) 表示选择 div 的第二个子元素。注意,这里的计数不是从 0 开始的,而是从 1 开始的。

以下是一个示例,展示如何使用此选择器选择 div 的第二个子元素,并设置其背景颜色为红色:

<div>
  <p>第一个子元素</p>
  <p>第二个子元素</p>
  <p>第三个子元素</p>
</div>
div:nth-child(2) {
  background-color: red;
}

在上面的示例中,第二个

元素的背景颜色将变为红色。

5.display: none 和 visibility: hidden 的区别

display: nonevisibility: hidden 二者都可以用来隐藏元素,但它们的实现方式和效果略有不同:

  1. display: none:该样式会将元素完全隐藏,不占据页面布局,也不会响应用户事件(例如点击、鼠标移入等)。设置元素的 display 属性为 none 会将该元素从渲染树中移除,因此该元素及其所有后代元素在页面上不会被显示,且不占用绘制资源和空间。
  2. visibility: hidden:该样式会使元素隐藏,但在页面布局中仍占据空间,并继续响应用户事件。而这种方式只是让元素不可见,但是元素仍会被渲染出来,只不过不可见罢了。以至于它仍然对渲染树和布局模型可能产生影响。

下面是一个示例,展示 display: nonevisibility: hidden 的效果差异:

<div>
  <p>文本内容</p>
  <button>按钮</button>
</div>
div {
  width: 200px;
  height: 200px;
  background-color: #ccc;
  display: flex;
  justify-content: center;
}
p {
  font-size: 24px;
  display: none;
}
button {
  font-size: 18px;
  visibility: hidden;
}

在上面的示例中,pbutton 元素分别被设置为 display: nonevisibility: hidden。当浏览器渲染页面时,p 元素被完全移除了,因此页面上不会看到任何文本内容,而 button 元素虽然占据了页面的空间,但是在页面上不可见,以至于它不会响应用户事件,即使用户点击了该区域。

因此,一般情况下,如果需要完全删除某个元素,不想再让它占据空间或影响其他元素,应该使用 display: none,如果只需要将元素隐藏起来,但仍占据空间并继续响应事件,可以使用 visibility: hidden

6.如果想要让一个元素的宽高包含元素的 boder 和 padding

| < - a - > | b: 50px | < - c - > |,a 和 c 等比填充,用 flex 怎么实现;如果我想让它变成垂直方向,怎么做?

可以使用 box-sizing 属性来解决这个问题。将 box-sizing 属性设置为 border-box 可以使元素的宽度和高度包括了 padding 和 border,而不用再考虑它们的影响。

对于您的要求,假设父元素宽度已经确定,如果要让其中的子元素宽度和高度等比例填充,可以将父元素的 display 属性设置为 flex,并在子元素上使用一个占比为 1 的 Flexbox 布局框架。然后将子元素的 box-sizing 属性设置为 border-box 即可。示例代码如下:

<div class="parent">
  <div class="child"></div>
</div>
• 1
• 2
• 3
.parent {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 200px;
  height: 200px;
  border: 10px solid #ccc;
  padding: 20px;
}
.child {
  flex: 1;
  box-sizing: border-box;
  background: #f00;
}

在上面的示例中,父元素 .parent 的宽度为 200px,高度为 200px,同时设置了边框和内边距。子元素 .child 使用了 Flexbox 布局的占比为 1 的框架,在 box-sizing 属性设置为 border-box 之后,它的实际宽度和高度就会考虑到父元素的边框和内边距。

如果希望这个布局框架垂直方向上往下延伸,只需将 .parent.child 元素都添加上 flex-direction: column 属性,示例代码如下:

.parent {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 200px;
  height: 200px;
  border: 10px solid #ccc;
  padding: 20px;
  flex-direction: column;
}
.child {
  flex: 1;
  box-sizing: border-box;
  background: #f00;
}



你的前端技术是否能通过这些高频面试题?(二)https://developer.aliyun.com/article/1426321


相关文章
|
6天前
|
前端开发 JavaScript 测试技术
前端测试技术中,如何提高集成测试的效率?
前端测试技术中,如何提高集成测试的效率?
|
20天前
|
Cloud Native 前端开发 JavaScript
前端开发者必看:不懂云原生你就OUT了!揭秘如何用云原生技术提升项目部署与全栈能力
【10月更文挑战第23天】随着云计算的发展,云原生逐渐成为技术热点。前端开发者了解云原生有助于提升部署与运维效率、实现微服务化、掌握全栈开发能力和利用丰富技术生态。本文通过示例代码介绍云原生在前端项目中的应用,帮助开发者更好地理解其重要性。
53 0
|
13天前
|
前端开发 JavaScript API
惊呆了!这些前端技术竟然能让你的网站实现无缝滚动效果!
【10月更文挑战第30天】本文介绍了几种实现网页无缝滚动的技术,包括CSS3的`scroll-snap`属性、JavaScript的Intersection Observer API以及现代前端框架如React和Vue的动画库。通过示例代码展示了如何使用这些技术,帮助开发者轻松实现流畅的滚动效果,提升用户体验。
83 29
|
4天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
16 2
|
6天前
|
移动开发 前端开发 JavaScript
惊!这些前端技术竟然能让你的网站在移动端大放异彩!
随着互联网技术的发展,移动设备成为主要的上网工具。本文介绍了几种关键的前端技术,包括响应式设计、图片优化、字体选择、HTML5和CSS3的应用、性能优化及手势操作设计,帮助开发者提升网站在移动端的显示效果和用户体验。示例代码展示了如何实现简单的双向绑定功能。
15 3
|
6天前
|
数据采集 前端开发 安全
前端测试技术
前端测试是确保前端应用程序质量和性能的重要环节,涵盖了多种技术和方法
|
12天前
|
编解码 前端开发 JavaScript
前端界的黑科技:掌握这些技术,让你的网站秒变未来感十足!
【10月更文挑战第31天】前端技术日新月异,黑科技层出不穷,让网页更加美观、交互更加丰富。本文通过响应式布局与媒体查询、前端框架与组件化开发等案例,展示这些技术如何让网站充满未来感。响应式布局使网站适应不同设备,前端框架如React、Vue则提高开发效率和代码质量。
25 3
|
13天前
|
JSON 前端开发 搜索推荐
惊!这些前端技术竟然能让你的网站实现个性化推荐功能!
【10月更文挑战第30天】随着互联网技术的发展,个性化推荐已成为提升用户体验的重要手段。前端技术如JavaScript通过捕获用户行为数据、实时更新推荐结果等方式,在实现个性化推荐中扮演关键角色。本文将深入解析这些技术,并通过示例代码展示其实际应用。
44 4
|
13天前
|
前端开发 JavaScript 测试技术
前端小白逆袭之路:如何快速掌握前端测试技术,确保代码质量无忧!
【10月更文挑战第30天】前端开发技术迭代迅速,新手如何快速掌握前端测试以确保代码质量?本文将介绍前端测试的基础知识,包括单元测试、集成测试和端到端测试,以及常用的测试工具如Jest、Mocha、Cypress等。通过实践和学习,你也能成为前端测试高手。
32 4
|
12天前
|
前端开发 JavaScript 数据处理
前端界的宝藏技术:掌握这些,让你的网页秒变交互神器!
【10月更文挑战第31天】前端开发藏有众多宝藏技术,如JavaScript异步编程和Web Components。异步编程通过Promise、async/await实现复杂的网络请求,提高代码可读性;Web Components则允许创建可重用、封装良好的自定义组件,提升代码复用性和独立性。此外,CSS动画、SVG绘图等技术也极大丰富了网页的视觉和交互体验。不断学习和实践,让网页秒变交互神器。
21 2