vue中watch新值和旧值的有效性分支结构
完整分支结构:
javascript
const watchFn = (val, oldV) => {
if (val === oldV) {
// 值未变化
if (val) {
// 值A -> 值A (真值不变,如 true → true)
} else {
// 假值不变 (如 null → null)
}
}
if (val !== oldV) {
// 值发生变化
if (val && oldV) {
// 有效值A -> 有效值B (如 1 → 2)
} else if (val && !oldV) {
// 假值 → 真值 (初始化或状态翻转,如 null → 42)
} else if (!val && oldV) {
// 真值 → 假值 (状态清除,如 42 → null)
} else {
// 假值A → 假值B (如 0 → "" 或 undefined → null)
}
}
};使用场景总结:
| 变化类型 | 示例 | 典型场景 |
|---|---|---|
| 真值 → 相同真值 | true → true | 相同对象/数组引用更新 |
| 假值 → 相同假值 | null → null | 空状态保持 |
| 真值A → 真值B | 1 → 2 | 有效值更新 |
| 假值 → 真值 | null → 42 | 初始化/重新赋值 |
| 真值 → 假值 | 42 → null | 清除状态 |
| 假值A → 假值B | 0 → "" | 空状态类型转换 |