由於 JavaScript 的限制,Vue 不能檢測以下變動的數組: 當你利用索引直接設置一個項時,例如:vm.items[indexOfItem] = newValue
當你修改數組的長度時,例如:vm.items.length = newLength
因為vue的響應式是通過 Object.defineProperty 來實現的,但是數組的length屬性是不能添加getter和setter,所有無法通過觀察length來判斷。
如下代碼,雖然看起來數組的length是10,但是for in的時候只能遍歷出0, 1, 2,導致了只有前三個索引被加上了getter 和setter
var a = [0, 1, 2] a.length = 10
// 只是顯示的給length賦值,索引3-9的對應的value也會賦值undefined // 但是索引3-9的key都是沒有值的 // 我們可以用for-in打印,只會打印0,1,2
for (var key in a) { console.log(key) // 0,1,2
}