还有个地方不明白

来源:4-6 vue如何监听数组变化

光天化日之下

2020-02-27

if (Array.isArray(target)) {
    target.__proto__ = arrProto
}

// 重新定义各个属性(for in 也可以遍历数组)
for (let key in target) {
    defineReactive(target, key, target[key])
}

当数组里面每个元素都不是对象时,例如:
var arr = [1,2,3];
for in 这段代码不就起不来作用,白执行了吗?

// 重新定义各个属性(for in 也可以遍历数组)
for (let key in target) {
    defineReactive(target, key, target[key])
}
写回答

2回答

双越

2020-02-27

数组的每个元素不是对象,如 [1, 2, 3] ,那就是指绑定数组原型即可,没不要再遍历一遍,对吧。

但是,你不遍历一遍,怎么知道数组内都不是对象呢?

所以,必须要遍历一遍,如果不是对象就直接 return 。看似无用,其实有用。万一里面有一个对象呢,不就有用了吗。

0
1
光天化日之下
非常感谢!
2020-02-27
共1条回复

百兽凯多00

2020-02-27

if (typeof target !== 'object' || target === null) {
        // 不是对象或数组
        return target
  }
开头这句话,不是对象类型的,就直接返回了

0
1
光天化日之下
明白了!谢谢
2020-02-27
共1条回复

2024版 前端框架及项目面试 聚焦Vue3/React/Webpack

面向1-3年前端的框架及项目面试“刚需内容”

4664 学习 · 1644 问题

查看课程