最近在牛客网练习的vue相关习题及答案整理,方便大家刷题

Vue相关的题目与答案:

1.      关于Vue组件化说法错误的

A. 所谓组件化,就是把页面拆分成多个组件 (component),每个组件依赖的 CSSJavaScript、模板、图片等资源放在一起开发和维护

B. 组件是资源独立的,组件在系统内部可复用,但是组件和组件之间不可以嵌套

C. vue的组件之间可以进行通信
D. 组件化能提高开发效率,方便重复使用,简化调试步骤,提升项目可维护性,便于多人协同开发


正确答案:B

解析:组件是资源独立的,组件在系统内部可复用,但是组件和组件之间可以嵌套

2.      下列关于客户端渲染和服务器端渲染的描述错误的是

            A服务器端渲染有利于SEO,且首页加载快
            B.客户端渲染节省后端资源,但可能会加载慢出现白屏
            C服务器端渲染耗费流量,局部页面的变化也需要重新请求完整的页面
            D.客户端和服务器端在首屏渲染上网络请求次数是一样的
           
          正确答案:D
   解析:客户端首屏渲染时首先拿到空的html模板,之后继续发起数据请求。而服务器端渲染只需要请求一次,服务器会将请求的数据放在html模板中一起返回。
3.      下列关于Vue的描述错误的是
       A当给某个组件修改某个值时,该组件不会立即重新渲染
       B. Vue内部使用原生Promise.thenMutationObserversetImmediate实现异步     队列,不会采用setTimeout(fn, 0)
      C. $nextTick()返回一个Promise对象
      D. $nextTick()可以配合async/await使用
正确答案:B
解析:Vue 在内部对异步队列尝试使用原生的 Promise.thenMutationObserver  setImmediate,如果执行环境不支持,则会采用 setTimeout(fn, 0) 代替。

    4. 现有以下代码,下面说法错误的是(   )

<div v-show='flag'>使用v-show控制</div>

<div v-if='flag'>使用v-if控制</div>

A. flagtrue时,两个div都能显示出来
B. flagfalse时,第一个div进行了渲染
C. flagfalse时,第一个div设置了display: none
Dflagfalse时,第二个div设置了visible: hidden
正确答案:D
解析:v-if的值是false的时候,该元素不进行渲染
5.      Vue 中通过给元素添加哪个属性绑定DOM元素()
            Aref
            Brefs
      C$ref
      D$refs
正确答案:A
解析:vue中可以使用ref绑定相应的元素  ref=name
然后使用 this.$refs.name  获取到该元素,并且可以直接调用子组件中定义的方法;
   6. 下列关于scoped的描述错误的是(   
Ascoped原理是在标签上添加data-v属性,然后使用属性选择器实现样式局部化
B. 使用scoped,父组件的样式会渗透到子组件内部的元素
C. 使用scoped不会造成全局污染
D. ">"可以实现样式穿透
正确答案:B
解析:使用scoped后,父组件的样式将不会渗透到子组件中。不过一个子组件的根节点会同时受其父组件的scoped css和子组件的scoped css的影响。这样设计是为了让父组件可以从布局的角度出发,调整其子组件根元素的样式。
7. 下列哪个选项不是单页面应用程序(SPA)的优点(   
A.不需要重新加载整个页面,运行流畅
B. 高效的前后端分离模式
C. 有利于SEO
D减轻服务器压力
正确答案:C
解析:单页面应用程序中首页的数据需要通过在服务器异步获取,在这之前首页仅仅是一个模板,不利于seo

知识点补充:

SPA的优点:

·  无刷新切换内容,提高用户体验。

·  符合前后端分离的开发思想,通过ajax异步请求数据接口获取数据,后台只需要负责数据,不用考虑渲染。前端使用vue等MVVM框架渲染数据非常合适。

·  减轻服务器压力,展示逻辑和数据渲染在前端完成,服务器任务更明确,压力减轻。

·  后端数据接口可复用,设计JSON格式数据可以在PC、移动端通用。


SPA的缺点:

  • 不利于SEO(搜索引擎优化),应用数据是通过请求接口动态渲染,不利于SEO。
  • 首页加载慢,SPA下大部分的资源需要在首页加载,造成首页白屏等问题。
8. 以下选项中不可以进行路由跳转的是(   
A. this.$router.jump()
B. route-link
C. this.$router.push()
Dthis.$router.replace()
正确答案:A
解析:Vue路由的跳转方式有route-linkthis.$router.push()this.$router.replace()this.$router.go()等,但是没有this.$router.jump()
9. 下面说法错误的是(   
Awatch监听对象必须设置deep: true
B. 数组直接通过索引修改属性值,能触发watch方法
C. watch内部可以写异步方法
D. immediate: true可以开启首次赋值监听
正确答案:B
解析:数组直接通过索引修改属性值不能触发watch
10. 现有以下代码, 打印的结果是(   

new Vue({

    data: { a: 'first', b: 'second' },

    created: function () { console.log(this.a) },

    mounted(){ console.log(this.b) }

})

A'first'
B'first'   'second'
C.  undefined  undefined
D.  


正确答案: A 

解析:mounted是vue中的一个钩子函数,一般在初始化页面完成后,再对dom节点进行相关操作。但是题例中没有执行dom挂载,所以mounted不会执行

11. 下列关于Vue模块化开发的描述错误的是(   )

A. 代码复用性高
B. 便于维护
C. 增加代码之间的耦合度
D. 避免命名冲突

正确答案: C 

解析:模块化开发就是将大的文件拆分为许多独立的小文件,按需在不同的组件中导入,降低了代码耦合度,提高了代码复用性。

12. 关于路由说法错误的是(   )

A.使用脚手架创建项目时,需要选择安装vue-router
B.在嵌套路由中,需要VueRouter的参数中使用children配置
C. vue-router不可以实现重定向
D. vue-router可以通过配置实现路由懒加载


正确答案: C  

解析:vue-router 里可以使用 redirect 实现理由重定向,

如  {path:"/",redirect:"/home"}

将页面重定向到 home页面

13. 现有以下代码,打印的结果是(   )

new Vue({

  data: { a: 1, b: 2 }, 

  watch: {

    a: {

      handler: function(value){

        console.log(value)

      }

    }

  }

})

A. 1
B. 打印语句不执行
C. undefined
D. null

正确答案: B

解析:使用watch `handler`属性有一个特点,就是当值第一次绑定时,watch不会执行监听函数,只有值发生改变时才会执行。

如果需要在最初绑定值的时候也执行函数,则就需要用到immediate属性,添加 immediate: true属性


1

2

3

4

5

6

7

8

watch: {

    a: {

      handler: function(value){

        console.log(value)

      },

      immediate: true

    }

 }

14. 关于路由模式说法错误的是(   )

A.vue-router有两种模式,historyhash模式
B.hash模式是通过onchange事件,监听url的修改
C.history通过H5提供的API  history.pushState  history.pushState实现跳转且不刷新页面
D.history模式需要后端进行配合
正确答案: B
解析:hash模式是通过onhashchange事件,监听url的修改
15.以下选项中属于Vuex中的属性的是(   
A.state
B.Mutations
C.actions
D.setters

正确答案: A B C

Vuex属性包含state、mutations、actions、getters、modules

16. 以下不是vue内置指令的是(   )

A. v-html
B.v-on
C.v-for
D.v-hidden
正确答案: D
没有v-hidden指令
17. 关于Vue双向数据绑定说法错误的是(   
A.Vue实现双向数据绑定是采用数据劫持和发布者-订阅者模式
B.Object.defineProperty(obj,key,val)可以监听数组变化,不需要做特殊处理
C.Vue2.0 数据劫持是利用ES5Object.defineProperty(obj,key,val)方法来劫持每个属性的gettersetter
D.用户更新了ViewModel的数据也自动被更新了,这种情况就是双向数据绑定
正确答案: B
Object.defineProperty(obj,key,val)不可以监听数组变化,需要做特殊处理,所以Vue3.0使用Proxy实现数据监听

18. 关于v-model的修饰符说法错误的是(   )

A.lazy修饰符让内容在change事件时而非input事件时更新
B.v-model添加number修饰符,可以自动将用户的输入值转为数值类型
C.可以给v-model添加trim修饰符,自动过滤用户输入的首尾空白字符
D.v-model添加number修饰符,如果这个值无法被parseFloat()解析,则会返回null

正确答案: D

v-model添加number修饰符,如果这个值无法被parseFloat()解析,则会返回原始的值。

19. 下列关于Vue2和Vue3的描述错误的是(   )

A.Vue3Template支持多个根标签,Vue2不支持
B.Vue3中的生命周期的挂载钩子是onMounted,需要引入才能使用
C.Vue3组合API中的setup()方法中不可以使用生命周期钩子函数
D.Vue3引入了tree-shaking,以模块的方式引入api,减小打包体积

正确答案: C

Vue3的组合API中的setup()方法包含了所有的基本内容,包括生命周期,可以在setup()中使用生命周期钩子函数。

20. 不属于Vue使用虚拟DOM的特点是(   )

A.虚拟节点可以理解成节点描述对象,它描述了应该怎样去创建真实的DOM节点。
B.虚拟DOM优势:渲染引擎操作 DOM 慢,js运行效率高,于是将DOM对比操作放在JS层,提高效率
C.提升渲染性能 Virtual DOM的优势不在于单次的操作,而是在大量、频繁的数据更新下,能够对视图进行合理、高效的更新
D.Virtual DOM 是以 JavaScript 对象为基础,所以必须依赖于浏览器才能运行
正确答案: D 
Virtual DOM 是以 JavaScript 对象为基础而不依赖真实平台环境,所以使它具有了跨平台的能力,比如说浏览器平台、WeexNode 等。
21.下列关于Vue内置组件的描述错误的是(   
transition:为组件的载入和切换提供动画效果
transition-group:作为多个元素/组件的过渡效果
keep-alive:缓存子组件,被包裹的子组件会多出两个生命周期:activateddeactivated
当组件在keep-alive内被切换时,它的mountedunmounted生命周期钩子也会被调用
正确答案: D
当组件在keep-alive内被切换时,它的mountedunmounted生命周期钩子会被activated和、deactivated代替。
22. 请按顺序选择正确的代码,实现图片预加载功能(   

<template>

  <div>

    <div>

      <h1><strong>Loading...</strong></h1>

      <h2><strong>{{percent}}%</strong></h2>

    </div>

  </div>

</template>

 

<script>

export default {

  data() {

    return {

      count: 0,

      percent: '',

      images: [

        'example.png',

        '...',

        '...'

      ]

    }

  },

  mounted() {

    __1__()

  },

  methods: {

    preload: function() {

      for (let url __2__ this.images) {

        let image = new Image()

        image.src = url

        image.__3__ = () => {

          this.count++

          this.percent = Math.floor(this.count / this.images.length * 100)

        }

      }

    },

  },

  watch: {

    __4__: function(num) {

      if (num === this.images.length) {

        this.$router.push({path: 'home'})

      }

    }

  }

}

</script>

正确答案: C this.preloadofonloadcount
挂载时,调用preload方法,使用of获取数组每项,图片加载成功时触发onload事件,观察count,当count等于数组长度时,代表全部加载完毕,进行跳转。
23. 下列关于vue-lazyload的描述错误的是(   
A.组件中使用vue-lazyload时,v-lazy代替v-bind:src
B.组件中使用vue-lazyload时,必须要加:key属性
C.vue-lazyload指令可以实现图片的懒加载
D.使用vue-lazyload时,扩展功能api中的attempt代表尝试加载图片数量
正确答案: B   :key可以不加,如果不加:key属性,刷新页面时,可能由于key相同,图片不刷新。
24. 阅读以下代码,请选择可以正确打印h1标签宽度的选项(   

<template>

  <div>

    <h1 ref='h1' v-if="show">nowcoder</h1>

  </div>

</template>

<script>

export default {

  data() {

    return {

      show: false

    }

  },

  mounted() {

    this.show = true

    // 此处填写代码

  }

}

</script>

A.this.$nextTick(function() {
    console.log(this.$refs.h1.offsetWidth)
})
B.setInterval(() => {
    console.log(this.$refs.h1.offsetWidth)
})
C.setTimeout(() => {
    console.log(this.$refs.h1.offsetWidth)
})
D.console.log(this.$refs.h1.offsetWidth)
正确答案: A B C
Vue实现响应式并不是数据发生变化之后DOM立即变化,而是在同步任务执行完成之后才执行渲染任务,简单说Vue的渲染是异步的。
26. 下列不属于Vue的特点的是(   
Vue.js的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进DOM的系统
实现了双向数据绑定
Vue.js可以进行组件化开发,使代码编写量大大减少,读者更加易于理解
Vue虽然也提供了渲染函数,默认使用模板渲染,且不支持JSX

正确答案: D
27. 关于Vue-cli说法错误的是(   )

Vue CLI是一个基于Vue.js进行快速开发的完整系统
CLI(@vue/cli) 是一个全局安装的npm包,提供了终端里的Vue命令
CLI目前还不能提供图形化界面管理你的所有项目
CLI服务是构建于webpackwebpack-dev-server之上的

正确答案: C  可以通过vue ui一套图形化界面管理你的所有项目

28. 下列关于v-model的说法,哪项是不正确的是(   )

v-model如果为不同元素绑定数据,则使用不同的元素property 并抛出不同的事件
v-model本质上是语法糖,它负责监听用户的输入事件以更新数据
v-model是内置指令,不能用在自定义组件上
input使用v-model,实际上是指定其 :valueinput事件

正确答案: C

vue2.2+版本新增了一个功能,可以在自定义组件上使用v-model实现双向绑定

29. 关于Vue双向数据绑定说法错误的是(   
Vue实现双向数据绑定是采用数据劫持和发布者-订阅者模式
Object.defineProperty(obj,key,val)可以监听数组变化,不需要做特殊处理
Vue2.0 数据劫持是利用ES5Object.defineProperty(obj,key,val)方法来劫持每个属性的gettersetter
用户更新了ViewModel的数据也自动被更新了,这种情况就是双向数据绑定
正确答案: B
Object.defineProperty(obj,key,val)不可以监听数组变化,需要做特殊处理,所以Vue3.0使用Proxy实现数据监听
30. 关于Vue组件生命周期说法错误的是(   
Vue组件的生命周期可以分成三个大阶段:挂载、更新、卸载
挂载阶段中涉及到的钩子函数有:beforeCreatecreatedbeforeMountmounted
更新阶段涉及的钩子函数有:beforeUpdateupdatedactivateddeactivated
首次进入页面钩子函数的执行顺序:beforeCreatecreatedbeforeMountmounted
正确答案: C
Vue组件的生命周期涉及到的钩子函数和执行顺序是:beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyedactivateddeactivated是组件设置了keep-alive时,进入组件和离开组件时分别触发的两个函数
31. 关于Vue组件的生命周期说法错误的是(   
mounted钩子函数中,可以直接获取DOM元素
beforeMount钩子函数中,不可以直接获取DOM元素
beforeDestroy钩子函数中,不可以直接获取DOM元素
destroyed钩子函数中,不可以直接获取DOM元素
正确答案: C
Vue的生命周期的钩子函数中mountedbeforeDestroy中都可以获取到DOM元素
32. 关于Vue组件间通信说法错误的是(   
Vuex可以实现任何关系的组件间的通信
如果子组件修改,通过props获取的父组件传过去的字符串或数字会报错
子组件可以通过$emit给父组件传值
可以通过context进行组件间传值
正确答案: D
context是用在react中进行组件间的传值,vue并不提供该方法,Vue组件间传值可以通过props$emit,Vuex,事件总线。通过props获取父组件的基本数据类型的值,在修改时会报错

33. 关于Vuex说法错误的是(   )

actions通过commit触发mutations中的方法进行状态变更
Vuex是单项数据流变更数据
ajax一般放在mutations中,把获取到的数据存储state
由于Vuex使用单一状态树,应用的所有状态会集中到一个比较大的对象
正确答案: C  
异步操作放在actions中,actions通过commit调用mutations中方法操作state
一般使用ajax时会使用异步处理,而mutation是写同步操作的,异步一般写在actions
34. 不属于Vue使用虚拟DOM的特点是(   
虚拟节点可以理解成节点描述对象,它描述了应该怎样去创建真实的DOM节点。
虚拟DOM优势:渲染引擎操作 DOM 慢,js运行效率高,于是将DOM对比操作放在JS层,提高效率
提升渲染性能 Virtual DOM的优势不在于单次的操作,而是在大量、频繁的数据更新下,能够对视图进行合理、高效的更新
Virtual DOM 是以 JavaScript 对象为基础,所以必须依赖于浏览器才能运行
正确答案: D
Virtual DOM 是以 JavaScript 对象为基础而不依赖真实平台环境,所以使它具有了跨平台的能力,比如说浏览器平台、WeexNode 
35. 关于Vue组件生命周期说法错误的是(   
A.在data中的对象的某个属性和input双向绑定,修改input的值,在deforeDestroy中获取的值是修改过后的值
B.父子组件生命周期的执行顺序是父亲beforecreate、父亲created、父亲beforeMount、孩子beforecreate、
孩子created、孩子beforeMount、父亲mounted、孩子mounted、父亲beforeDestroy、孩子beforeDestroy、孩子destroyed、父亲destroyed
C.在created钩子函数中操作DOM,可以将语句放在$nextTick
D.ajax请求可以放在created钩子函数中
正确答案: B
知识点:加载渲染过程:
beforeCreate->created->beforeMount->beforeCreate->created->beforeMount->mounted->mounted
子组件更新过程
beforeUpdate->beforeUpdate->updated->updated
父组件更新过程
beforeUpdate->updated
销毁过程
beforeDestroy->beforeDestroy->destroyed->destroyed

36. 有如下代码,最终渲染出来的div元素的class属性值是(   )

有如下模板:

1

2

3

4

<div

  class="static"

  v-bind:class="{ active: isActive, 'text-danger': hasError }"

></div>

和如下data:


1

2

3

4

data: {

  isActive: true,

  hasError: false

}

正确答案:B static  active

可以通过v-bind绑定class属性,且可以通过变量控制属性值,当变量是true时,该属性会被添加到class属性中

37. 用于绑定DOM属性的指令是(   )

v-on
v-model
v-bind
v-html

正确答案: C

定DOM属性的指令是v-bind

38. 以下获取动态路由{ path: '/name/:id' }中id的值正确的是(   )

this.$route.params.id
this.route.params.id
this.$router.params.id
this.router.params.id

正确答案: A

router其实是VueRouter的一个实例,所以它是一个全局对象,包含了所有的子对象和属性

而route是正在跳转的这个路由的局部对象,可以获取这个正在跳转的路由的name,path,params,query等

this.$router  全局的路由对象,options.routes包括所有的路由路径,this.$router.push()   this.$router.go()
this.$route  本页面的路由对象, 当前页的 url地址,  当前页的传参  params   query

39. 下列关于Vue自定义指令钩子函数的描述错误的是(   )

被绑定元素插入父节点时调用inserted函数
bind函数只调用一次,指令第一次绑定到元素时调用
组件的VNode更新时调用update函数
自定义指令钩子函数参数"el"指所绑定的元素,但是不可以通过el直接操作DOM元素

正确答案: D

自定义指令钩子函数参数"el"指所绑定的元素,可以直接操作DOM元素。如修改绑定元素的字体颜色:el.style.color = 'red'。

40. 关于$nextTick说法错误的是(   )

在组件内使用vm.$nextTick()实例方法特别方便,因为它不需要全局Vue,并且回调函数中的this将自动绑定到当前的Vue实例上
created等虚拟DOM没有完成挂载的钩子函数中,不能把操作语句放在$nextTick的回调函数中
$nextTick()返回一个Promise对象
需要使用$nextTick()原因是Vue是异步渲染

正确答案: B

在created等虚拟DOM没有完成挂载的钩子函数中,避免操作DOM报错可以把操作语句放在$nextTick的回调函数中

41. 下列关于Vue响应式的描述错误的是(   )

当利用索引值设置一个数组项时,Vue不能检测到数组的变动
当修改数组的长度时,Vue不能检测到数组的变动
Vue可以监听对象属性的添加或删除
可以通过Vue.set()方法向嵌套对象添加响应式属性

正确答案: C

Vue无法检测property的添加或移除。由于Vue会在初始化实例时对property执行getter/setter转化,所以property必须在data对象上存在才能让Vue将它转换为响应式的。

这里应该需要说明下vue的版本在2.x的时候,在3.x的时候已经实现了深层对象和数组元素直接赋值、删除属性的响应式

由于 JavaScript 的限制,Vue 不能检测数组和对象的变化,因而对象属性的添加或删除不可以监听到。

Vue 无法检测 property 的添加或移除。由于 Vue 会在初始化实例时对 property 执行 getter/setter 转化,所以 property 必须在data对象上存在才能让 Vue 将它转换为响应式的

42.下列关于Vue和React的描述错误的是(   )

Vue进行数据拦截/代理,对数据更敏感,数据驱动视图自更新,而React需要手动驱动数据更新视图
VueReactthis都指向当前组件实例
VueReact都能使用jsx进行编程
VueReact都是数据驱动视图的更新

正确答案: B React中组件的this并不是当前实例,需要通过bind或箭头函数来修改指向。

43. 关于Vue中的diff算法说法错误的是(   )

比较只会在同层级节点进行比较, 不会跨层级比较
diff比较的过程中,循环从两边向中间收拢。
vue的虚拟dom渲染真实 dom 的过程中首先会对新老VNode的开始和结束位置进行标记:oldStartIdxoldEndIdxnewStartIdxnewEndIdx
当老VNode节点的 start 和新VNode节点的end满足sameVnode,VNode节点会被提到start位置

正确答案: D

老 VNode 节点的start和新VNode节点的end满足 sameVnode 时,这说明这次数据更新后oldStartVnode已经跑到了oldEndVnode后面去了,这时候在patchVnode后,还需要将当前真实dom节点移动到oldEndVnode的后面,同时老VNode节点开始索引加 1,新VNode节点的结束索引减 1。

44. 以下属于Vue绑定事件的指令是(   )

v-bind
@
v-on
1

正确答案: B C 

绑定事件有两种方式:第一种,通过v-on指令。二种,通过@语法糖

45. 下面说法错误的是(   )

watch方法中不能执行异步操作
不应该使用箭头函数来定义 method 函数,箭头函数绑定了父级作用域的上下文,所以this将不会按照期望指向 Vue 实例
Vue 实例将会在实例化时调用$watch(),遍历 watch 对象的每一个 property
computed的结果会被缓存,除非依赖的响应式 property 变化才会重新计算

正确答案: A watch中能够执行异步操作

46. 关于路由守卫说法错误的是(   )

Vue路由守卫分为全局路由、单个路由守卫、组件内部路由
全局路由守卫的钩子函数有:beforeRouteEach(全局前置守卫)、beforeRouteResolve(全局解析守卫)、afterRouteEach(全局后置守卫)
单个路由独享的钩子函数只有一个:beforeEnter
组件路由守卫相关的钩子函数:beforeRouteEnter beforeRouteUpdatebeforeRouteLeave

正确答案: B

全局路由守卫的钩子函数有: beforeEach(全局前置守卫)、beforeResolve(全局解析守卫)、afterEach(全局后置守卫)


#学习路径#
全部评论
关于Vue的功能描述错误的是( ) A.Vue 的组件不可复用 B.Vue具有虚拟DOM功能 C.Vue 可以实现视图和数据解耦 D.Vue 可用于数据绑定
点赞 回复 分享
发布于 2023-06-06 15:27 重庆
😂有时间再整理排版,最近太忙
点赞 回复 分享
发布于 2021-11-01 20:13

相关推荐

04-03 11:37
武汉大学 Java
高斯林的信徒:武大简历挂?我勒个骚岗
点赞 评论 收藏
分享
评论
8
48
分享

创作者周榜

更多
牛客网
牛客企业服务