Appearance
思考题:特殊修改值情况
本节目标:理解“思考题:特殊修改值情况”的核心思路,并能把它用于实际开发或面试表达。 如果数组通过索引给元素赋新值,不管新增是不是object类型,新值不会被截持; data() { return { name: "hello zf", arr: [{ name: "zf" }, 100, [1]] }; }, // {a:1}
不会被截持vm.arr[1] = { a: 1 }; // [3,4]
这个数组的变异方法不会被改写vm.arr[2] = [3, 4]; let vm = new Vue({ el: "#app", data() { return { name: "hello zf", arr: [{ name: "zf" }, 100] }; }, });
如果数组的索引指向的值是对象,对此对象的属性进行取值和改值会被拦截; //
这个操作走的是对象属性的改值逻辑vm.arr[0].name = "jw";
如果数组索引指向的值是数组,且对这值使用变异方法进行操作,会调用我们改写的变异方法,也就是将新增的元素用数组包装,再对数组的每个元素调用observer方法,此时,如果是新增object类型的元素,这个元素会被截持; data() { return { name: "hello zf", arr: [{ name: "zf" }, 100, [1]] }; }, // push
进去的元素会被转换成数组//
然后对数组的每一项进行循环调用`observer`方法vm.arr[2].push(2);
