星海

Vue · 单选题 · 第 50 题

前端与全栈开发面试 · 第 50 题

Vue 2 中,下列哪种修改不能被响应式系统自动侦测到?

  1. A通过下标直接给数组元素赋值,比如 arr[0] = 1
  2. B修改 data 中已经声明过的某个属性的值
  3. C调用数组的 push 方法往数组末尾添加元素
  4. D给已存在的对象属性重新赋值一个新的对象

答案

A A. 通过下标直接给数组元素赋值,比如 arr[0] = 1

解析

Vue 2 用 Object.defineProperty 只能劫持初始化时已存在的属性,出于性能考虑也没有劫持数组下标。所以按下标赋值和给对象新增属性都不会触发更新,需要用 Vue.set 或 this.$set。push、splice 等 7 个变异方法被 Vue 2 重写过,可以触发更新;Vue 3 的 Proxy 方案没有这些限制。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。