由于 JavaScript 的限制,Vue 不能检测数组和对象的变化。这句话什么意思?

由于 JavaScript 的限制,Vue 不能检测数组和对象的变化。

官网地址
Vue中数组和对象改变,页面是有及时更新的啊!这句话说的是哪种情况?

阅读 3.8k
1 个回答

他说的是你改变对象的某一属性,而这一个属性并没有事先定义。Vue通过Object.definedProperty来劫持data上的数据,对对象这一类型会遍历所有属性来设置setter/getter。所以如果你没有事先就声明好对象的属性而动态添加的话会检测不到,比如:

data: {
    obj: {
        x: 1,
    }
},
methods: {
    change() {
        // y没有事先声明,无法检测到变化
        this.obj.y = 2;
    }
}

数组也是同理。【PS:实际上数组是可以检测到的,但是据尤大所说是出于性价比的考虑而没有做,感兴趣可以搜一下,gayhub上有人提过issue貌似】

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题