vue —— 新增面试题(项目使用)

1.使用vue时,想要页面第一次渲染就调用watch

immediate
发现watch的一个特点是最初绑定的时候不执行改变即第一次直接赋值不会监听到,这里需要用到immediate属性,默认值为false,我们需要这样写immediate:true,即立刻执行。deep
watch的另一个属性是deep,默认值为false,代表是否深度监听,设置deep:true,意思就是深入观察,监听器会一层层的往下遍历,给对象的所有属性都加上这个监听器,但是这样开销性能就会非常大了,任何修改对象里面的一个属性都会触发这个监听器里的handler

watch: {
    dateList: {
      handler(val) {},
      immediate: true,
    },
  },

2.vue内置组件 keep-alive

组件缓存,组件实例能够在第一次被创建时缓存
在函数组件中不能正常工作,因为函数组件没有缓存实例

新增
include:需要缓存的组件;
exclude:除了某些组件外都要缓存;
max:数字,最多可以缓存多少组件实例,数字达到后,缓存组件中最久没有被访问的实例会被销毁;

<keep-alive :include=“a, b">
    <component :is=“view></component>
</keep-alive>

<keep-alive :include=/a|b/">
    <component :is=“view></component>
</keep-alive>

<keep-alive :include=[‘a’, ‘b']">
    <component :is=“view></component>
</keep-alive>
具体使用

详见博客主页vue内置组件keep-alive具体使用方法

3.vue的路由缓存

  • 缓存全部路由
<keep-alive>
    <router-view></router-view>
</keep-alive>
  • 缓存指定路由
<keep-alive :include=“name">
    <router-view></router-view>
</keep-alive>
  • 动态缓存指定路由
    路由meta属性中添加keepAlive: true/false
{
    path: '/home',
    component: () => import('../home.vue'),
    meta: {
        title: ',
        keepAlive: true
    }
}
<keep-alive>
    <router-view v-if=“$route.meta.keepAlive"></router-view>
</keep-alive>

4.虚拟DOM优缺点

优点:
1.无需手动操作DOM,可以通过框架的双向数据绑定更新视图;
2.跨平台,DOM是js对象,可以更方便的跨平台操作,例如服务器渲染;
3.可以保证在你不需要手动优化的情况下,依然可以提供还不错的性能
缺点:
是在一些性能要求极高的应用中虚拟DOM无法进行针对性的优化,且首次渲染大量DOM时插入innerHTML过慢

5.DOM事件流

包含3个阶段
事件捕获阶段目标阶段事件冒泡阶段
首先发生的事件捕获为截获事件提供机会,然后是实际的目标接收事件,最后一个阶段是事件冒泡阶段,可以在这个阶段对事件做出响应。

6.js面试题 —— ajax同步和异步的区别

同步:当js代码加载到ajax时会把页面所有代码停止加载,页面处于假死状态,这个ajax执行完之后才继续运行其他代码;
异步:ajax运行时其他代码一样可以运行,

jquery的async:false
默认:true:同步, false:异步

$.ajax({
       type: "post",
       url: "path",
       cache:false,
       async:false,
       dataType: ($.browser.msie) ? "text" : "xml",
        success: function(xmlobj){
       }
});

7.setIntervel的返回值

setInterval 返回值是数字id,从1开始,

setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
比如说clearInterval(attime) ;这样就可以停止调用函数,

事实上,如果你只用了一次setInterval ,返回的值就是1,
然后clearInterval(1);也是可以停止调用函数的;

8.浅记vue生命周期

created: 没有$el,没有DOM;
beforeMount: 出现虚拟DOM;
mounted:页面渲染完成,真实DOM出现,可以操作DOM,发送http请求;

9.单页面优缺点

优点:
1.没有页面之间的切换,就不会出现白屏现象,也不会出现假死并有闪烁现象,页面显示流畅,web更具有响应性
2.良好的前后端分离工作模式
3.减轻服务器压力
缺点:
1.首屏加载慢,可以使用路由懒加载
2.不利于SEO,可以使用history模式、页面预渲染

10.vue路由模式(默认hash)

  • Hash
    当URL改变的时候,页面不会重新加载,当#后面的hash发生变化,不会导致浏览器向服务器发出请求,浏览器不发出请求就不会刷新页面,并且会触发hasChange这个事件,通过监听hash值的变化来实现更新页面部分内容的操作
  • History
    会将URL修改成正常请求后端的URL一样,如后端没有配置对应**/user/id**的路由处理,则会返回404错误,需要后端在服务端设置,如果 URL 匹配不到任何静态资源,则返回同一个index.html页面,这个页面就是你 app 依赖的页面

11.显示转换,隐式转换

  • 显式转换:
    toString、toNumber、toBoolean、Number、parseInt、parseFloat
    toBoolean有七个值会转为false,其他都是true:
0falseNAN、Null、Undefined、空字符串‘’
  • 隐式转换:
    1. 字符串和数字相加是字符串拼接,数字会转为字符串
    2. true转为1,false转为0
    3. 数字加date对象,转成字符串类型
    4. 判断转成boolean类型(if、for循环中的判断、while、do while、三目运算、逻辑运算等)
    5. 取反!

12.this

普通函数中下this指的是window,严格模式下this指的是undefined;
箭头函数下this是上下文环境;
对象方法中指的是调用的对象;
call,apply,bind改变this指向;
事件绑定中this指的是触发事件的元素本身。

13.vue多层组件传值(provide, inject)

在父组件中通过provide提供变量,在子组件中inject注入变量,不管多少层组件,在父组件有效生命周期中该变量一直生效,但是父组件值改变,子组件中注入的不会改变
父组件:

export default {
      provide: {
        name: ‘hh’
    }    
}

子组件:

export default {
    inject: [‘name’],
    mounted () {
         console.log(this.name)
    }
}

在这里插入图片描述

14.css3 新增属性

  • 边框颜色border-color、边框背景图border-image
  • 圆角边框border-radius
  • 阴影box-shadow、文字阴影text-shadow
  • 背景图片:background-clip(指定背景图片从什么位置开始裁剪)、background-size、background-origin(指定背景图片从什么位置开始显示)
  • 自动换行word-wrap
  • 动画animation、过渡transition、变换transform

15.常用的项目优化

1.减少http请求
2.路由、图片懒加载
3.非核心代码异步加载,async…await
4.利用浏览器缓存:

  • 强缓存:不使用服务器请求,直接使用本地缓存,利用http响应请求头实现的;
    – Expires:服务器返回的绝对时间;
    – Cache-control:服务器返回的相对时间;
  • 协商缓存:浏览器发现本地有资源的副本,问一下服务器要不要使用,如果某个资源 请求超时了,就会向服务器发送一个请求,验证协商缓存是否命中,利用两个header

5.尽量少操作DOM,少使用循环和条件查询

Vue 3 是目前前端领域非常热门的一个框架,以下是几个常见的 Vue 3 面试题及其解答: ### 面试题Vue 3 中 Composition API 和 Options API 的区别是什么? **答案**: Composition API 和 Options API 是 Vue.js 提供的两种编写组件的方式。 1. **Options API**: 这是 Vue 2 及更早版本的主要编程风格,基于选项(如 `data`、`methods` 等),将逻辑按照生命周期分块组织。 - 示例代码: ```javascript export default { data() { return { count: 0, }; }, methods: { increment() { this.count++; } } } ``` 2. **Composition API**: 引入于 Vue 3,提供了一种更灵活的方式来组合和复用逻辑。通过函数式语法结构,可以更好地管理复杂状态和业务逻辑。 - 使用 setup 函数作为入口点,在其中可以直接访问响应式数据以及定义方法等。 - 示例代码: ```javascript import { ref } from 'vue'; export default { setup() { const count = ref(0); function increment() { count.value++; } return { count, increment }; } } ``` Compostion API 更适合大型应用及需要高度模块化设计场景下使用;而 Options API 则更为直观简单易懂,对于小型项目来说足够了。 --- ### 面试题:谈谈对 Proxy 对象的理解,并说明它如何替代 Vue 2 中使用的 Object.defineProperty? **答案**: 在 JavaScript 中,Proxy(代理)允许我们拦截并自定义某些基本操作的行为 (例如属性查找、赋值等)Vue 3 正是因为采用了该特性实现了全新的依赖收集机制,取代了之前 Vue 2 所采用的传统 method——Object.defineProperty. #### 主要优势包括以下几个方面: 1. **性能优化:** 相较之下,当处理嵌套深层的对象或者数组元素变更检测时效率更高; 2. **功能增强:** 支持直接监听 Array 类型的数据变化; 3. **代码简洁度提升:** 能够自动追踪新增加或删除掉的 key ,无需额外配置 set/get 操作符即可完成任务。 因此可以说 proxy 是未来发展趋势之一! --- ### 面试题:解释一下 Teleport 组件的作用 **答案**:Teleport 是 Vue 3 新增的功能插件,用于解决跨 DOM 树渲染的问题。它可以让我们把某个特定部分的内容移动到页面其他位置而不影响原本组件内部的状态维护工作流程。 举个例子而言如果想要弹窗显示覆盖整个屏幕而不是局限于当前容器范围内就可以利用 teleport 实现这种需求: ```html <template> <teleport to="body"> <!-- Modal content --> <div v-if="showModal" class="modal">This is a modal!</div> </teleport> <button @click="toggleModal()">Toggle Modal</button> </template> ``` 上述示例展示了如何创建一个脱离原有层级关系的模态框效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值