## [如何追踪变化](https://v2.cn.vuejs.org/v2/guide/reactivity.html#%E5%A6%82%E4%BD%95%E8%BF%BD%E8%B8%AA%E5%8F%98%E5%8C%96 "如何追踪变化")
当你把一个普通的 JavaScript 对象传入 Vue 实例作为`data`选项,Vue 将遍历此对象所有的 property,并使用[`Object.defineProperty`](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty)把这些 property 全部转为[getter/setter](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Working_with_Objects#%E5%AE%9A%E4%B9%89_getters_%E4%B8%8E_setters)。`Object.defineProperty`是 ES5 中一个无法 shim 的特性,这也就是 Vue 不支持 IE8 以及更低版本浏览器的原因。
这些 getter/setter 对用户来说是不可见的,但是在内部它们让 Vue 能够追踪依赖,在 property 被访问和修改时通知变更。这里需要注意的是不同浏览器在控制台打印数据对象时对 getter/setter 的格式化并不同,所以建议安装[vue-devtools](https://github.com/vuejs/vue-devtools)来获取对检查数据更加友好的用户界面。
每个组件实例都对应一个**watcher**实例,它会在组件渲染的过程中把“接触”过的数据 property 记录为依赖。之后当依赖项的 setter 触发时,会通知 watcher,从而使它关联的组件重新渲染
![https://v2.cn.vuejs.org/images/data.png](https://img.kancloud.cn/99/29/992960d20efd8b792fa5b741aede5eed_1200x750.png)
## [检测变化的注意事项](https://v2.cn.vuejs.org/v2/guide/reactivity.html#%E6%A3%80%E6%B5%8B%E5%8F%98%E5%8C%96%E7%9A%84%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9 "检测变化的注意事项")
由于 JavaScript 的限制,Vue**不能检测**数组和对象的变化。尽管如此我们还是有一些办法来回避这些限制并保证它们的响应性。
- 空白目录
- CSS相关知识
- 透明度
- 鼠标样式
- 盒子隐藏
- 背景图
- 文本
- 字体
- 链接
- 列表样式
- 边框border
- 轮廓outline
- 外边距Margin
- 内填充Padding
- Css综合
- css分组和嵌套
- css尺寸
- CSS鼠标样式
- 显示与隐藏 display
- 定位
- Vue2
- Vue的核心原理
- vue的拦截原理
- vue的模板语法
- 数据绑定
- MVVM
- 事件处理
- 计算属性与监视
- class与style的绑定
- 条件渲染
- 列表渲染
- 收集表单
- 内置指令
- vue的生命周期
- 单文件组件
- vue脚手架
- 基础知识
- ref和props
- mixin混入
- 插件
- scoped样式
- 缓存WebStorage
- 组件的通信
- 消息的发布于订阅
- 全局事件总线
- 组件自定义事件
- nextTick
- vue封装的过渡于动画
- Vue脚手架配置代理
- 插槽
- Vuex
- 搭建vuex环境
- 基本使用
- getters的使用
- 四个Map的使用
- 模块化+命名空间
- 路由
- route基本使用
- 注意点
- 多级路由
- query参数
- 命名路由
- params参数
- 路由的props配置
- route-link的replace属性
- 编程式路由导航
- 缓存路由文件
- 两个生命周期钩子(路由)
- 路由守卫
- 路由器的两种工作方式
- Vue常用UI库
- JavaScript相关知识
- 基础知识
- Js常用表达式
- Js常见的事件
- Js的重要公共方法
- Js数据类型
- Js字符串
- Js数组
- Js布尔类型
- Js的类型转换
- Js算数
- Js的日期处理
- Js的循环
- Js正则匹配
- Js的DOM篇
- Js的DOM1
- Js的DOM2
- Js高级教程
- Js的BOM
- Js之Window
- Js之Window Screen
- Js之Window Location
- Js之Window History
- Js之Navigator
- Js之弹框
- Js之计时
- Js之Cookies
- Js库-框架篇
- jquery
- prototype
- Vue3