核心结论
Vue 2 的响应式系统主要依赖 Object.defineProperty 劫持对象已有属性的读取和写入。数组索引会动态增加和移动,若逐个为索引建立访问器,初始化与维护成本都很高;直接通过索引赋值或修改 length 也不一定经过框架已经建立的拦截。因此,Vue 2 不能可靠检测 arr[index] = value 和 arr.length = value。它通过改写七个会原地修改数组的方法,在方法执行后观察新增元素并通知依赖更新。
底层机制
被观测的数组会关联一个增强的数组原型。框架包装 push、pop、shift、unshift、splice、`s