me/Web前端面试题.md
2025-04-29 13:57:04 +08:00

4.5 KiB
Raw Blame History

v-if和v-show的区别分别适合什么场景

v-if 操作的实际上是 dom 元素的创建或销毁。v-show 操作的是display:none/block属性。频繁地切换使用 v-show否则使用 v-if。

async await 关键字的用途

async await 是es7里面的新语法async 用于声明一个异步函数await 阻塞等待一个异步方法执行完成。

  • Cookie 是 http 协议的组成部分,会在同源 http 请求中携带数据根据不同浏览器限制大小一般不能超过4k
  • LocalStorage 和 SessionStrorage 仅会持久化存储大小一般是5M

Vue组件中的data为什么是一个函数而不是一个对象

组件共享 data 属性,当 data 的值是同一个引用类型的值时,改变其中一 个会影响其他

用CSS3让一个div垂直居中怎么写

transform

#container {
  position: relative;
}
#center {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

flex

#container {
  display: flex;
  justify-content: center;
  align-items: center;
}

谈谈性能优化案例

减少 http 请求次数、压缩上线代码、懒加载、动态渲染组件、CDN。

Vue实例挂载在哪个标签

body 标签里,在 vue 中是获取不了 body 标签的需要用原生js获取

用过Map和Set吗Set和数组的区别是什么Map和Object的区别

set 是 es6 提供的一种新的数据结构,它类似于数组,但是成员的值都是唯一的。 map 是 es6 提供的一种新的数据结构,它类似于对象也是键值对的集合但是键的范围不仅限于字符串各种类型的值都可以当做键。也就是说Object 结构提供了“字符串—值”的对应Map 结构提供 了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构Map 比 Object 更合适。

图片懒加载是怎么实现的?

就是我们先设置图片的 data-set 属性(当然也可以是其他任意的,只要不会发送 http 请求就行了,作用 就是为了存取值)值为其图片路径,由于不是 src所以不会发送 http 请求。然后我们计算出页面 scrollTop 的高度和浏览器的高度之和, 如果图片距离页面顶端的坐标 Y相对于整个页面而不是浏览 器窗口)小于前两者之和,就说明图片就要显示出来了(合适的时机,当然也可以是其他情况),这时 候我们再将 data-set 属性替换为 src 属性即可。

怎么防止被CSRF和XSS攻击

  • CSRF Cross-site request forgery )跨站请求伪造
    • Token 验证
    • 把token放在header
    • Referer 验证,只接受本站的请求,服务器才做响应,如果不是就拦截
  • XSSCross Site Scripting跨域脚本攻击
    • 对用户输入的数据进行 HTML Entity 编码
    • 移除用户输入的和事件相关的属性。如 onerror 可以自动触发攻击,还有 onclick 等
    • 移除用户输入的 Style 节点、 Script 节点、 Iframe 节点。

Vue3的组件式API和选项式API的区别

  • 选项API通过定义methodscomputedwatchdata等属性与方法共同处理页面逻辑。
    • 如果是小组件适合用选项式API
    • 如果是大组件,属性的列表很长,会导致组件难以阅读和理解
  • 组件式API根据逻辑功能来组织的一个功能所定义的所有 API 会放在一起,更高内聚、低耦合。
    • 对 tree-shaking 友好,代码也更容易压缩
    • 几乎用不到this避免了this指向不明的情况

Vue3是通过哪些方面提升性能的

  • 编译阶段
    • diff算法优化
    • 静态提升
    • 事件监听缓存
    • SSR优化
  • 源码体积
    • Tree shanking清除多余代码优化项目打包体积
    • 任何一个函数如ref、reavtived、computed等仅仅在用到的时候才打包没用到的模块都被摇掉打包的整体体积变小
  • 响应式
    • vue2中采用 defineProperty来劫持整个对象然后进行深度遍历所有属性给每个属性添加getter和setter实现响应式
    • vue3采用proxy重写了响应式系统因为proxy可以对整个对象进行监听所以不需要深度遍历

Vue3新增的组件

  • Fragment 不再限制 template 只有一个根节点
  • Teleport 传送门,允许我们将控制的内容传送到任意的 DOM 中
  • Suspense 等待异步组件时渲染一些额外的内容,让应用有更好的用户体验