Vue · 单选题 · 第 50 题
前端与全栈开发面试 · 第 50 题
Vue 2 中,下列哪种修改不能被响应式系统自动侦测到?
- A通过下标直接给数组元素赋值,比如 arr[0] = 1
- B修改 data 中已经声明过的某个属性的值
- C调用数组的 push 方法往数组末尾添加元素
- D给已存在的对象属性重新赋值一个新的对象
答案
A A. 通过下标直接给数组元素赋值,比如 arr[0] = 1
解析
Vue 2 用 Object.defineProperty 只能劫持初始化时已存在的属性,出于性能考虑也没有劫持数组下标。所以按下标赋值和给对象新增属性都不会触发更新,需要用 Vue.set 或 this.$set。push、splice 等 7 个变异方法被 Vue 2 重写过,可以触发更新;Vue 3 的 Proxy 方案没有这些限制。